kubekey离线部署集群详解

前言

为什么选择 kubekey

低成本

相较于 kubeadm 安装,使用 kubekey 可以让 k8s 小白直接上手操作,对于初次安装所需要排查的问题也比较简单,无需就是 socat、conntrack 等组件没有安装,containerd 没有被卸载。

支持安装 kubeSphere

直接通过 kubekey 可以安装 图形化界面,对新手友好。

操作简单

新建集群、升级集群、删除集群 、将节点拉入集群 都比较简单操作。

部署步骤

主节点操作

注意所有操作全在主节点,只有安装 conntrack 、socat 是所有节点都安装。
如果使用仓库需要修改 docker 或者 containerd 配置文件。

安装 conntrack 、socat

sudo apt install conntrack
sudo apt install socat 

私有仓库(可选)

看具体容器运行时是 containerd 还是 docker ,虽说 docker 更为广泛传播,但是 k8s 官方从某个版本后开始不再支持 docker 作为容器运行时了,而 containerd 又是 docker 的核心组件,所以说 docker 本质上还是依赖于 containerd 。下面的 sample.yaml 包含了私有仓库地址。

准备离线安装包

kubesphere.tar 离线部署安装包
kubekey-v3.1.0-alpha.7-linux-amd64.tar.gz 解压缩到 /opt/kubekey/ 会变成 kk 的可执行文件 ,安装包可从 kubekey 下载。
kubekey-artifact.tar.gz 离线部署安装包不需要解压。 kubekey-artifact.tar.gz为离线部署包,生成方式请参考kubekey官方文档。
不同架构的 cpu 需要对照不同的离线部署安装包,该包主要是一个原有集群生成的,就像 docker commit 的操作,如果是不同架构 cpu,需要在一个稳定的那个架构的集群打离线部署包,否则就把sample.yml文件中的私有 仓库注释,然后让它自己去拉外网镜像,拉不到会报响应的错误,错误包含了需要拉取的镜像,然后下载到其他机器的镜像并打成 tar 包,再推到服务器上面加载到私有仓库去,再用私有仓库地址就行。

对应的 sample.yaml配置文件也放在 该目录下。
sample.yaml 文件示例:

apiVersion: kubekey.kubesphere.io/v1alpha2
kind: Cluster
metadata:
  name: sample
spec:
  hosts: 
  ##You should complete the ssh information of the hosts
  - {name: k8s-master-01, address: 192.168.34.4, internalAddress: 192.168.34.4, user: root, password: "123"}
  - {name: k8s-node-01, address: 192.168.34.2, internalAddress: 192.168.34.2, user: root, password: "123"}
  - {name: k8s-node-02, address: 192.168.34.3, internalAddress: 192.168.34.3, user: root, password: "123"}
  roleGroups:
    etcd:
    - k8s-master-01
      #- k8s-node-01
    master:
    - k8s-master-01
    #- k8s-node-01
    worker:
    - k8s-master-01
    - k8s-node-01
    - k8s-node-02
    registry:
    - k8s-master-01
  controlPlaneEndpoint:
    ##Internal loadbalancer for apiservers
    #internalLoadbalancer: haproxy

    ##If the external loadbalancer was used, 'address' should be set to loadbalancer's ip.
    domain: lb.kubesphere.local
    address: ""
    port: 6443
  kubernetes:
    version: v1.28.2
    clusterName: cluster.local
    proxyMode: ipvs
    masqueradeAll: false
    maxPods: 10000
    nodeCidrMaskSize: 24
    containerManager: containerd
  network:
    plugin: calico
    calico:
      ipipMode: Always
      vxlanMode: Never
      vethMTU: 1440
    kubePodsCIDR: 10.233.64.0/18
    kubeServiceCIDR: 10.233.0.0/18
  registry:
    privateRegistry: "192.168.34.4:5000"
    #privateRegistry: ""
    registryMirrors: []
    insecureRegistries: []
    auths: # if docker add by `docker login`, if containerd append to `/etc/containerd/config.toml`
      "192.168.34.4:5000":
        skipTLSVerify: true

推送 kubesphere 离线部署安装包

sudo ./opt/kubekey/kk artifact image push -f /opt/kubekey/sample.yaml -a /home/user/k8s-deploy/kubesphere.tar

安装集群

sudo ./kk create cluster -f /opt/kubekey/sample.yaml -a /home/user/k8s-deploy/kubesphere.tar --with-kubesphere -y

根据配置升级集群

sudo ./kk upgrade --with-kubesphere -f sample.yaml -y

卸载集群

sudo ./opt/kubekey/kk delete cluster -f /opt/kubekey/sample.yaml  -y

TrubleShoot

kubectl 报错

如果重启 master 节点后 kubectl 连不上集群,但是 kubesphere 可以访问到集群,那么就是 k8s 的轮转机制在生效,每次重启 master 都会重新生成 ca 证书,只需要关闭这个配置,或者每次重启后都将其 ~/.kube/config 中的 client-certificate-data 改为新的 /etc/kubeneters/pki/apiserver-kubelet-client.crt 的 base 64 结果即可,base64 直接用操作系统提供的:

cat /etc/kubernetes/pki/apiserver-kubelet-client.crt | base64 | tr -d '\n'

注意:config 中有三个配置的密钥,分别对应的是 base64 后的 /etc/kubeneters/pki/ca.crt ,/etc/kubeneters/pki/apiserver-kubelet-client.crt , /etc/kubeneters/pki/apiserver-kubelet-client.key 。对应的字段是 certificate-authority-data 、client-certificate-data、client-key-data。

重启集群后丢失数据

etcd 自动保存数据有时间间隔,配置可以改,但是 etcd 有损坏的风险,还是建议备份 etcd 数据库。

# 备份 etcd
etcdctl --endpoints=https://192.168.32.2:2379 \
        --cacert=/etc/ssl/etcd/ssl/ca.pem \
        --cert=/etc/ssl/etcd/ssl/admin-k8s-master-01.pem \
        --key=/etc/ssl/etcd/ssl/admin-k8s-master-01-key.pem \
        snapshot save /var/backups/etcd-snapshot.db

        
# 恢复 etcd
sudo systemctl stop etcd
sudo mv /var/lib/etcd /var/lib/etcd.bak

sudo etcdctl snapshot restore /var/backups/etcd-snapshot.db \
  --data-dir /var/lib/etcd \
  --name etcd-k8s-master-01 \
  --initial-cluster etcd-k8s-master-01=https://192.168.32.2:2380 \
  --initial-cluster-token k8s_etcd \
  --initial-advertise-peer-urls https://192.168.32.2:2380

sudo ls /var/lib/etcd
sudo systemctl start etcd
sudo systemctl status etcd
etcdctl --endpoints=https://192.168.32.2:2379 \
  --cacert=/etc/ssl/etcd/ssl/ca.pem \
  --cert=/etc/ssl/etcd/ssl/admin-k8s-master-01.pem \
  --key=/etc/ssl/etcd/ssl/admin-k8s-master-01-key.pem \
  get / --prefix --keys-only
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值