目录
准备
术语说明
在线安装
离线安装
常用命令
Helm
安装helm
增加国内镜像仓库源、查看仓库列表、在仓库搜索chart
创建release
自定义chart配置文件
etcd命令
准备
虚拟机192.168.255.130 安装k3s server,192.168.255.131安装k3s agent
修改/etc/hostname 和 /etc/hosts,让主机名不一样
术语说明
- kubeconfig:用于配置集群访问的文件称为 kubeconfig 文件。 这是引用到配置文件的通用方法,并不意味着有一个名为
kubeconfig
的文件。kubectl
命令行工具使用 kubeconfig 文件来查找选择集群所需的信息,并与集群的 API 服务器进行通信。默认情况下,kubectl
在$HOME/.kube
目录下查找名为config
的文件。 你可以通过设置KUBECONFIG
环境变量或者设置 --kubeconfig参数来指定其他 kubeconfig 文件
在线安装
公共依赖
切换yum源CentOS-Base.repo,安装以下,每个节点都执行
yum install -y container-selinux selinux-policy-base
yum install -y https://rpm.rancher.io/k3s/stable/common/centos/7/noarch/k3s-selinux-0.2-1.el7_8.noarch.rpm
环境变量
给每个节点设置一个K3S_NODE_NAME环境变量,每个节点不同,否则会出现server is not ready: Node password rejecte,try enabling a unique node name with the --with-node-id flag的报错
export K3S_NODE_NAME=centos1
server
192.168.255.130安装server
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
运行此安装后:
- K3s 服务将被配置为在节点重启后或进程崩溃或被杀死时自动重启。
- 将安装其他实用程序,包括
kubectl
、crictl
、ctr
、k3s-killall.sh
和k3s-uninstall.sh
。 -
kubeconfig 文件将写入到
/etc/rancher/k3s/k3s.yaml
,由 K3s 安装的 kubectl 将自动使用该文件。
配置主节点 kubeconfig文件,配置到 .kube目录, 配置环境变量,默认寻找这个目录
mkdir -p /root/.kube/
cat /etc/rancher/k3s/k3s.yaml > /root/.kube/config
export KUBECONFIG=/root/.kube/config
设置随机启动
systemctl daemon-reload
systemctl enable k3s
启动server服务
systemctl start k3s systemctl status k3s
agent
192.168.255.131安装agent
查询K3S_TOKEN
使用的值存储在 Server 节点上的文件
cat /var/lib/rancher/k3s/server/node-token
安装
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn NOBEST=true K3S_URL=https://192.168.255.130:6443 K3S_TOKEN=K10348463da1678047813219f0e5b75073aee773b6d70253701e4e11a6786bc43c4::server:08518e5883666d472f598e7cb586e9a5 sh -
-
K3S_URL
参数会导致安装程序将 K3s 配置为 Agent 而不是 Server。K3s Agent 将注册到在 URL 上监听的 K3s Server。 -
K3S_TOKEN
修改。
配置agent节点的kubeconfig文件,从主节点复制文件,修改server项
scp 192.168.255.130:/etc/rancher/k3s/k3s.yaml /etc/rancher/k3s/ (修改为主节点IP)
vi /etc/rancher/k3s/k3s.yaml (修改Server项为主节点IP)
server: https://192.168.255.130:6443
kubeconfig文件,配置到 .kube目录,默认寻找这个目录
mkdir -p /root/.kube/
cat /etc/rancher/k3s/k3s.yaml > /root/.kube/config
export KUBECONFIG=/root/.kube/config
设置随机启动
systemctl daemon-reload
systemctl enable k3s-agent
启动服务
systemctl start k3s-agent
systemctl status k3s-agent
离线安装
下载安装脚本后执行
wget https://rancher-mirror.rancher.cn/k3s/k3s-install.sh
agent 安装
INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://centos1:6443 K3S_TOKEN=K1084018794ea0af2437b924c1a3d0fd9e4f9da134e8955d4c5906c0460a64b215c::server:044606fc4395b88ebc9766eeef9725cf ./k3s-install.sh
安装提示缺少container-selinux,找对应版本下载
常用命令
查看k3s server状态
systemctl status k3s
查看k3s agent状态
systemctl status k3s-agent
重启,启动,停止,systemctl restart\start\stop
查看pod
kubectl get pods -n namespace
进入pod
kubectl exec -it rdba-3-gxk-0-0-11113366-6496f5d8d9-6jr5z -n namespace /bin/sh
退出pod
exit
看pod信息,看service信息类似
kubectl describe pod rdba-3-gxk-0-0-11113366-6496f5d8d9-6jr5z -n namespace
Helm
Helm使用的包格式称为 chart。 chart就是一个描述Kubernetes相关资源的文件集合,比如通过安装一个redis的chart,就安装了redis所需要的pod、service等等。
安装helm
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
增加国内镜像仓库源、查看仓库列表、在仓库搜索chart
helm repo add azure http://mirror.azure.cn/kubernetes/charts
helm repo list
helm search repo redis
helm如果报错找不到kubernates,配置kubeconfig
export KUBECONFIG=/root/.kube/config
创建release
- helm show chart azure/redis:查看redis chart详情
- helm show values azure/redis:查看redis values(values:相当于chart的配置文件)
- helm install redis-test azure/redis :安装chart 生成一个release,redis-test是release名字,azure/redis是包名chart名。helm依次安装service、pod等资源
- helm status redis-test :查看release状态,Helm 客户端不会等到所有资源都运行才退出。许多 charts 需要大小超过 600M 的 Docker 镜像,可能需要很长时间才能安装到集群中。
- helm list:查看release列表
install过程有提示信息,或者helm status redis-test能看到提示,如何连接创建的redis
kubectl get svc能看到install创建出来的redis master和slave
按照提示得到redis密码,能连接master的clusterip
卸载release
helm uninstall redis-test
自定义chart配置文件
建立单master的配置文件,名为only-master.values。把redis设置为单例、设置了密码admin
## Cluster settings
cluster:
enabled: false
## Redis pod Security Context
securityContext:
enabled: false
## Use password authentication
usePassword: true
## Redis password (both master and slave)
password: "admin"
## Redis Master parameters
master:
persistence:
enabled: false
然后--dry-run一下,看看生成出来的yaml文件是否存在问题:
helm install redis-demo stable/redis -f ./only-master.values --dry-run
如果没有问题,则进行实际的安装
helm install redis-demo stable/redis -f ./only-master.values
安装后redis密码变成admin,单例。
不卸载release,升级为redis集群,建立master-slave配置文件,名为master-slave.values
## Cluster settings
cluster:
enabled: true
slaveCount: 1
securityContext:
enabled: false
## Use password authentication
usePassword: true
password: "admin"
## Mount secrets as files instead of environment variables
usePasswordFile: false
## Redis Master parameters
master:
persistence:
enabled: false
## Redis Slave properties
slave:
persistence:
enabled: false
--dry-run一下,看看生成出来的yaml文件是否存在问题;由于在系统中已经有redis-demo的release,因此使用upgrade来进行升级:
helm upgrade redis-demo stable/redis -f ./master-slave.values --dry-run helm upgrade redis-demo stable/redis -f ./master-slave.values
检查slave是否安装成功,以及是否同步成功
redis-cli -h `kubectl get svc redis-demo-slave -o=jsonpath="{.spec.clusterIP}"` -a admin
get name
- 最后,回滚至单master模式
- 查看部署历史:helm history redis-demo
- 回滚到对应的单master版本:helm rollback redis-demo REVISION
- 再连接slave已经不成功了:
redis-cli -h `kubectl get svc redis-demo-slave -o=jsonpath="{.spec.clusterIP}"` -a admin
- 只有master能连接:
redis-cli -hkubectl get svc redis-demo-master -o=jsonpath="{.spec.clusterIP}"` -a admin
# 输入命令测试一下
get age
etcd命令
etcdctl --write-out=table --endpoints http://172.21.75.156:2379 member list
etcdctl endpoint status --cluster --write-out=table