溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

發(fā)布時(shí)間:2021-07-30 16:55:52 來源:億速云 閱讀:265 作者:Leah 欄目:云計(jì)算

本篇文章為大家展示了kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群,內(nèi)容簡明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

一. 環(huán)境和版本信息


OS:  CentOS 7.6.1810HAProxy Vervion:  1.5.18Docker Version:  Docker-CE 18.09.1Kubetnetes Version:  v1.15.1HAProxy:  192.168.199.200Control-plane Node(master node):node-01:  192.168.199.201
    node-02:  192.168.199.202
    node-03:  192.168.199.203Worker Node:node-04:  192.168.199.204
    node-05:  192.168.199.205
    node-06:  192.168.199.206

二. 系統(tǒng)配置:


    1. 關(guān)閉防火墻
sudo systemctl stop firewalld
sudo systemctl disable firewalld
   2. 關(guān)閉selinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
    3. 關(guān)閉swap
sudo swapoff -a

     注釋swap掛載,如下圖:

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

三. 安裝docker、kubeadm、kubelet、kubectl


1. 安裝docker-ce
  • 安裝依賴包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  • 添加 yum 源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  • 安裝 docker-ce
sudo yum install -y docker-ce-18.09.1-3.el7
  • 官方推薦修改 cgroup driver 為 systemd,更穩(wěn)定,詳見:https://kubernetes.io/docs/setup/cri 

mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl restart docker
systemctl enable docker

2. 配置 CNI插件(flannel) 所需的iptables轉(zhuǎn)發(fā)參數(shù)

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/k8s.conf

3. 安裝kubeadm、kubelet、kubectl

  • 官方 yum 源國內(nèi)訪問不了,這里添加阿里云 yum 源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
enabled=1
EOF
  • yum 安裝
sudo yum install -y kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1 --disableexcludes=kubernetes
systemctl enable kubelet

提示:上面步驟二 和 步驟三 所有k8s節(jié)點(diǎn)都需要執(zhí)行

四. 安裝haproxy


1配置 kube-apiserver 高可用需要一個(gè)負(fù)載均衡,這里直接使用了一個(gè)單節(jié)點(diǎn) haproxy 代替一下,實(shí)際生產(chǎn)環(huán)境中使用 keepalived 保證 haproxy 的高可用
sudo yum install -y haproxy
2. 將 master node 的 kube-apiserver 的 6443 添加到 haproxy做負(fù)載均衡
vi /etc/haproxy/haproxy.cfg
frontend k8s_apiserver *:6443
  mode tcp
  default_backend k8s

backend k8s
  mode tcp
  balance    roundrobin
  server     node-01 192.168.199.201:6443 check
  server     node-02 192.168.199.202:6443 check
  server     node-03 192.168.199.203:6443 check
3. reload 應(yīng)用配置
systemctl reload haproxy
4. 查看6443端口是否已經(jīng)在監(jiān)聽狀態(tài)

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

五. 安裝 master node


1.  創(chuàng)建 kubeadm 配置文件
cat <<EOF > kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.15.1
controlPlaneEndpoint: "192.168.199.200:6443"
imageRepository: "registry.aliyuncs.com/google_containers"
networking:
  podSubnet: "10.244.0.0/16"
apiServer:
  certSANs:
  - "k8s.mytest.com"
EOF
# controlPlaneEndpoint   haproxy 的負(fù)載均衡監(jiān)聽地址
# imageRepository  默認(rèn)使用gcr.io鏡像站,國內(nèi)訪問不了,這里指定從阿里云的鏡像站拉鏡像
2. 初始化集群
sudo kubeadm init --config=kubeadm-config.yaml --upload-certs
  • 初始化成功,記錄下最后提示的 kubeadm join xxx 命令, 第一個(gè)是往集群添加master node,第二個(gè)是往集群添加 worker node

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

3.  為 kubectl 配置kube-config
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config  sudo chown $(id -u):$(id -g) $HOME/.kube/config
4.  安裝 CNI插件 flannel
wget https://raw.githubusercontent.com/coreos/flannel/62e44c867a2846fefb68bd5f178daf4da3095ccb/Documentation/kube-flannel.yml
  •  默認(rèn)是從quay.io拉取flannel鏡像,但是經(jīng)常因?yàn)榫W(wǎng)絡(luò)原因拉不了,這里從阿里云找了一個(gè)替換了一下

sed -i s#'quay.io/coreos/flannel:v0.11.0-amd64'#'registry.cn-hangzhou.aliyuncs.com/mygcrio/flannel:v0.11.0-amd64'#g kube-flannel.yml
kubectl apply -f kube-flannel.yml
 5. 使用上面記錄的kubeadm jion ... 命令將另外兩個(gè)master節(jié)點(diǎn)(node-02,node-03)添加進(jìn)集群
 
kubeadm join 192.168.199.200:6443 --token ax13yr.yzsps775bllh0mlo \
 --discovery-token-ca-cert-hash sha256:07b2b093be7ddabe7372b2c765b20343aa92f67db99286be1dc46b867a330f95 \
 --control-plane --certificate-key b68cd457e26c827994c9804f8adf7a22720aba5a5e9f8e4e487a587b2c2fc127
6.  查看etcd 集群狀態(tài)
docker run --rm -it --net host -v /etc/kubernetes:/etc/kubernetes \
registry.aliyuncs.com/google_containers/etcd:3.3.10 etcdctl \
 --cert-file /etc/kubernetes/pki/etcd/peer.crt \
 --key-file /etc/kubernetes/pki/etcd/peer.key \
 --ca-file /etc/kubernetes/pki/etcd/ca.crt \
 --endpoints https://192.168.199.201:2379 cluster-health
  • kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群圖中可以看出etcd 集群健康狀態(tài)正常,到這里master node基本已經(jīng)安裝結(jié)束,下面開始添加worker node。

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

六. 添加 worker node

1. 執(zhí)行 步驟 1.系統(tǒng)配置 和 步驟 2.安裝docker、kubeadm、kubelet 
2. 執(zhí)行集群初始化完成后記錄的第二條 kubeadm join ... 命令: 
kubeadm join 192.168.199.200:6443 --token ax13yr.yzsps775bllh0mlo \
    --discovery-token-ca-cert-hash sha256:07b2b093be7ddabe7372b2c765b20343aa92f67db99286be1dc46b867a330f95
  kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

七. 檢查集群


1. 查看node
kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群
  • 各節(jié)點(diǎn)狀態(tài)正常,如果有節(jié)點(diǎn)狀態(tài)為 NotReady,有可能是該節(jié)點(diǎn)還未完全初始化成功,可以稍等片刻再查看是否正常。

  • 如果想將 master node 同時(shí)當(dāng)做 worker node使用,執(zhí)行如下命令即可:

kubectl taint nodes --all node-role.kubernetes.io/master-
2. 查看 pod 
  • 如果有系統(tǒng)組件pod狀態(tài)異常,使用 kubectl describe pod xxx 查看詳細(xì)信息。

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

八.  add-ons


  • dashboard 提供集群的GUI

  • metrics server 提供資源監(jiān)控(heapster 目前已經(jīng)被官方棄用)

     

1. 安裝 dashboard

  • 生產(chǎn)環(huán)境中使用 dashboard 推薦使用 HTTPS,證書獲取這里就不寫了,可以到阿里云申請(qǐng)免費(fèi)的DV證書或者 let's encrypt也可以,我這里使用 acme 申請(qǐng)了一個(gè) let's encrypt 的證書,我這里證書文件放在了 $HOME/certs 目錄下,里面包含dashboard.crt、dashboard.key兩個(gè)證書文件;

  • 導(dǎo)入證書

kubectl create secret generic kubernetes-dashboard-certs --from-file=$HOME/certs -n kube-system
  • 下載和修改部署官方y(tǒng)aml文件的image,官方的鏡像站 k8s.gcr.io 訪問不了~訪問不了~訪問不了~~~

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
sed -i s#'k8s.gcr.io/kubernetes-dashboard-amd64'#'registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64'#g kubernetes-dashboard.yaml
  • 部署

kubectl create -f kubernetes-dashboard.yaml
  • 查看 pod 是否已經(jīng) running

kubectl get pods -n kube-system
  • 創(chuàng)建完成后我們還不能直接訪問dashboard,因?yàn)?dashboard  服務(wù)還沒暴露出來,生產(chǎn)中一般使用 ingress 對(duì)外服務(wù),這里我們先用 nodeport 方式暴露出來,下篇文章會(huì)寫到 ingress 的使用;

kubectl expose svc kubernetes-dashboard --port=443 --target-port=8443 --type=NodePort --name=test-dashboard -n kube-system
  • 查看 service test-dashboard 的 nodeport 端口號(hào):

kubectl describe svc test-dashboard -n kube-system

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

  • 使用任意節(jié)點(diǎn) ip:端口號(hào) 訪問;使用ip可能會(huì)提示非安全訪問,因?yàn)樵L問的域名和簽名申請(qǐng)的證書域名不一致導(dǎo)致,這里先選擇繼續(xù)訪問即可,后續(xù)寫到 ingress 的時(shí)候也會(huì)解決

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

  • 已經(jīng)安裝成功,但是還需創(chuàng)建一個(gè)管理員用戶登錄:

vi admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
  • 查看 token

kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

  • 登錄dashboard

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

2. 安裝 metrics-server

  • 拉取 metrics-server 倉庫

git clone https://github.com/kubernetes-incubator/metrics-server.git
  • 部署,官方image還是下載不了,替換image

sed -i s#'k8s.gcr.io'#'registry.aliyuncs.com/google_containers'#g metrics-server/deploy/1.8+/metrics-server-deployment.yaml
kubectl create -f metrics-server/deploy/1.8+/
  • 確定 pod 已經(jīng) running

kubectl get pods -n kube-system
  • 編輯 deployment, 添加參數(shù):

args:
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

  • kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群成功獲取cpu和內(nèi)存指標(biāo),如果出現(xiàn) "error: metrics not available yet", 那就稍等幾分鐘再試,metrics server 需要采集指標(biāo)數(shù)據(jù)

kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群

上述內(nèi)容就是kubernetes中如何使用 kubeadm 創(chuàng)建高可用集群,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI