背景

原部署了一个master+双worker的集群,后面想升级成HA模式,一开始是用的kubeadm方式部署的,配置使用了很多默认的,因为熟练度的原因,改起来出现了很多的错误,一直没有成功。本文主要用于记录需要注意的点,具体部署方式请看转载的地址。

注意点

1. 初始化集群配置文件

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.56.29 #本人用的双网卡通信,填写可用于与其他主机通信的主机地址
  bindPort: 6443 #实际用于被代理的apiServer访问端口
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8smaster1 #节点名称,一般hostname
  taints:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
---
apiServer:
  certSANs: #填写master(29、27)节点地址和vip地址(28)
    - k8smaster1
    - k8smaster2
    - master.k8s.io
    - 192.168.56.28
    - 192.168.56.29
    - 192.168.56.27
    - 127.0.0.1
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: "master.k8s.io:16443" #这个是apiServer访问地址,也是HA对外访问的地址
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.19.16 #我升级了一下版本,1.18.x版本也一样的
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}

2.flannel网络插件

      containers:
      - args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=enp0s8  #使用双网卡的这里加一个配置,填写可用于与其他主机通信的网卡
        command:
        - /opt/bin/flanneld

3.加入其他master节点

kubeadm join master.k8s.io:16443 --token ckf7bs.30576l0okocepg8b     --discovery-token-ca-cert-hash sha256:19afac8b11182f61073e254fb57b9f19ab4d798b70501036fc69ebef46094aba --control-plane --certificate-key 3c3230b89e79d49bef4eb81aaf0e4fa7556ffb79ec783abdb0e537ee852c3242 --apiserver-advertise-address 192.168.56.27 --apiserver-bind-port 6443

双网卡最好加上–apiserver-advertise-address这个参数并指定地址,不然会默认使用第一个网卡的ip来组建etcd
4.etcd集群

$ vi /etc/kubernetes/manifests/etcd.yaml
#这里填写自己其他节点etcd地址,然后保存退出即可
...
- --initial-cluster=k8smaster1=https://192.168.56.29:2380,k8smaster2=https://192.168.56.27:2380

5.负载均衡
负载均衡直接使用nginx代理真实的apiserver地址,然后对外暴露vip的地址即可。

6.提醒
如果更改过certSANs,则需要更新证书以及重启apiserver服务。因为做高可用vip,apiserver访问地址我改过一次,结果集群就不能正常访问了,如果不是用于学习和非常了解k8s集群,还是不要轻易乱改,避免出现我这样的情况。本次作为踩坑教训。

资料:
Certificate-Key的作用
K8S 更新证书,添加master ip 或域名
kubeadm v1.18.0 HA
k8s无法通过svc访问其他节点pod
解决 Kubeadm 添加新 Master 节点到集群出现 ETCD 健康检查失败错误

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐