環境說明
- k8s集群版本: v1.18.9
- docker 版本: 19.3.15
- linux系統:CentOS Linux 8 (Core)
- 機器節點: master-1、master-2、master-3, 本文檔以master-1為master節點,將master-2、master-3作為node節點加入k8s集群,最后將k8s集群轉為openyurt集群
- centos 使用 aliyun: sed -i '/mirrorlist=/d;s|#baseurl=//mirror.centos.org/$contentdir/$releasever|baseurl=//mirrors.aliyun.com/$contentdir/$releasever-stream|g' /etc/yum.repos.d/CentOS-*
- openyurt集群:v0.6.0
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 list docker-ce --showduplicates | sort -r
#安裝docker
yum update && yum install -y docker-ce-19.03.15-3.el8 docker-ce-cli-19.03.15-3.el8 containerd.io-1.4.12
#開機啟動docker
systemctl enable docker --now
#/etc/docker/daemon配置文件
mkdir -p /etc/docker
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
systemctl daemon-reload
systemctl restart docker
kube*安裝
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 模式(相當于將其禁用)
setenforce 0
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
#重啟
sysctl --system
#關閉防火墻
systemctl disable firewalld --now
3. kube*安裝,并啟動kubelet
#安裝kube
yum install -y kubelet-1.18.9 kubeadm-1.18.9 kubectl-1.18.9 --disableexcludes=kubernetes
#啟動kubelet
systemctl enable --now kubelet
kubeadm初始化master1節點
#1.初始化,其中xxxxx代表master-1節點內網IP,yyyy為外部IP,zzz可以是域名
kubeadm init --apiserver-advertise-address=xxxx --control-plane-endpoint=yyyy --image-repository ehub.ctcdn.cn/eck --kubernetes-version v1.18.9 --service-cidr=10.96.0.0/16 --pod-network-cidr=10.244.0.0/16 --apiserver-cert-extra-sans=yyyy,zzzz --v=5
#2.執行成功后按照提示執行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#3.部署網絡插件flannel(flannel文件可在官方下載后做相應修改,如鏡像拉取地址等) //github.com/flannel-io/flannel/blob/release/v0.14.1/Documentation/kube-flannel.yml 版本要對應
kubectl apply -f ./flannel.yaml
#4.完成后可以通過kubectl get node -A 查看集群內已加入master-1節點,且狀態為ready
kubeadm將node節點加入集群
#1.在master-1機器獲取加入集群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-1集群獲取證書
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)
#4.加入后可以在master-1節點看到集群內的節點
kubectl get node -A
k8s轉換為openyurt
#使用yurtctl將k8s轉換為openyurt 注意節點名和tunel server的地址
./yurtctl convert --provider kubeadm --cloud-nodes master-1,master-2,master-3 -t -e \
--kubeadm-conf-path /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf \
--yurthub-healthcheck-timeout 5m \
--yurt-controller-manager-image ehub.ctcdn.cn/eck/openyurt/yurt-controller-manager:v0.6.0 \
--yurt-tunnel-agent-image ehub.ctcdn.cn/eck/openyurt/yurt-tunnel-agent:v0.6.0 \
--yurt-tunnel-server-image ehub.ctcdn.cn/eck/openyurt/yurt-tunnel-server:v0.6.0 \
--yurt-app-manager-image ehub.ctcdn.cn/eck/openyurt/yurt-app-manager:v0.5.0 \
--node-servant-image ehub.ctcdn.cn/eck/openyurt/node-servant:v0.6.0 \
--yurt-tunnel-server-address yyyy:31008 \
--yurthub-image ehub.ctcdn.cn/eck/openyurt/yurthub:v0.6.0
echo "更改kube-proxy的設置,確保邊緣節點的kubeproxy能連上中心"
kubectl annotate service kube-dns -n kube-system openyurt.io/topologyKeys=openyurt.io/nodepool
kubectl get cm -n kube-system kube-proxy -o jsonpath="{.data.config\.conf}" > config.conf && \
sed -i '/kubeconfig: \/var\/lib\/kube-proxy\/kubeconfig.conf/d' config.conf && \
kubectl get cm -n kube-system kube-proxy -o jsonpath="{.data.kubeconfig\.conf}" > kubeconfig.conf && \
kubectl create configmap kube-proxy --from-file config.conf --from-file kubeconfig.conf -n kube-system -o yaml --dry-run=client | kubectl replace -f - && \
rm -f config.conf && rm -f kubeconfig.conf && kubectl delete pods -l k8s-app=kube-proxy -n kube-system