1.1. 環境說明
- k8s集群版本: v1.18.9
- docker 版本: 19.3.15
- linux系統:CentOS Linux 7 (Core) 3.10.0-957.27.2.el7.x86_64
- 機器master節點: master-1、master-3, 本文檔以重置過的master-2節點為例,將master-2加入openyurt集群
1.2. Docker安裝
1. 添加docker-ce鏡像源 ( vi /etc/yum.repos.d/docker-ce.repo )
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=//mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=//mirrors.aliyun.com/docker-ce/linux/centos/gpg
2. 安裝docker, 并添加配置文件
#安裝docker
yum update && yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io-1.4.12
#開機啟動docker
systemctl enable docker --now
#/etc/docker/daemon配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"log-driver": "json-file",
"log-opts": {"max-size": "100m", "max-file": "3"},
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
#重啟docker
sudo systemctl daemon-reload
sudo systemctl restart docker
1.3. kubectl、 kubeadm、kubelet
1. 添加k8s鏡像源 ( vi /etc/yum.repos.d/Kubernetes.repo)
[Kubernetes]
baseurl = //mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled = 1
gpgcheck = 0
gpgkey = //mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg //mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
name = kubernetes
repo_gpgcheck = 0
2. 基礎環境設置
#設置機器名
hostnamectl set-hostname master-2
# 將 SELinux 設置為 permissive 模式(相當于將其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
#關閉swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
#允許 iptables 檢查橋接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
#重啟
sudo sysctl --system
3. 安裝kubectl、kubeadm、kubelet并啟動kubelet
#安裝kube
yum update && yum install -y kubelet-1.18.9 kubeadm-1.18.9 kubectl-1.18.9 --disableexcludes=kubernetes
#啟動kubelet
systemctl enable --now kubelet
1.4. 使用kubeadm將master2節點加入集群
#1.在其它master機器獲取加入集群token
kubeadm token create --print-join-command
輸出: kubadm join xxxxxx(集群url) --token xxxxxx(bootstrap-secret) --discovery-token-ca-cert-hash sha256:xxxxxx(sha256加密算法字符串)
#2.在其它master集群獲取證書
kubeadm init phase upload-certs --upload-certs
輸出:xxxxxx(certificate key)
#3.執行加入master節點命令
kubadm join xxxxxx(集群url) --token xxxxxx(bootstrap-secret) --discovery-token-ca-cert-hash sha256:xxxxxx(sha256加密算法字符串) --control-plane --certificate-key xxxxxx(certificate key)
1.5. 手動將master2 k8s節點轉成openyurt 云節點
1. 把其他master節點的 /etc/kubernetes/manifests/yurt-hub.yaml 拷貝到master-2的/etc/kubernetes/manifests/yurt-hub.yaml相應位置
2. 修改yurt-hub.yaml文件中join-token
#先根據kubeadm token list判斷文件中的token是否存在,若不存在則使用kubeadm token create創建token并替換
command:
- yurthub
- --v=2
- --server-addr=//xxxxxx
- --node-name=$(NODE_NAME)
- --join-token=xxxxxx
- --working-mode=cloud
3. 將其它master節點/var/lib/openyurt/kubelet.conf文件拷貝到 master-2節點/var/lib/openyurt/kubelet.conf相應位置
4. 修改/var/lib/kubelet/kubeadm-flags.env 文件,追加–kubeconfig=xxx --bootstrap-kubeconfig=xxx
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=ehub.ctcdn.cn/cpdn/pause:3.2 --kubeconfig=/var/lib/openyurt/kubelet.conf --bootstrap-kubeconfig= "
5. master-2節點上打上 openyurt云端label
kubectl label node master-2 openyurt.io/is-edge-worker=false
6. 重啟kubelet服務
systemctl restart kubelet
2.1 遇到的問題
問題1 :執行kubeadm join時出現 failed to get etcd status for //192.168.0.3:2379: failed to dial endpoint //192.168.0.3:2379 with maintenance client: context deadline exceeded
這是由于之前master2加入過集群時導致的etcd錯誤,現在的maser2節點對應的ip是192.168.0.5
#進入master1節點的etcd pod
kubectl exec -ti etcd-k8s-master01 -n kube-system sh
#查看etcd 節點
export ETCDCTL_API=3
etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member list
#找到192.168.0.3 對應的節點id,執行刪除操作
etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" member remove 17826e460c060952(192.168.0.3:2379對應的節點)