1. 程式人生 > >ubuntu部署kubeadm1.13.1高可用

ubuntu部署kubeadm1.13.1高可用

kubeadm的主要特性已經GA了,網上看很多人說1.13有bug在1.13.1進行的更新,具體我也沒怎麼看,有興趣的朋友可以查查,不過既然有人提到了我們就不要再去踩雷了,就用現在的1.13.1來部署叢集。kubeadm對於初學k8s來說是很友好的,從部署到完成熟練的話一個單節點可能也就20分鐘左右,不過在1.13之前用kubeadm最大的問題就是科學上網,不過從1.13開始就可以imageRepository引數下載國內映象再也不用擔心映象下載問題。稍微吐槽一下,建議大家再部署過程中還是以官網為主,大多數網上的文件千篇一律都不知道誰複製誰的,由於環境不同很多部署方式也加入了自己的理解,本人非大佬沒有那麼深的理解所以就是一步步按照自己和官網搭建的,可能有理解不到位或者欠缺的地方望大家多多提寶貴意見,廢話不多說上正題。

說下環境方面: 系統: Ubuntu 16.04.5  核心: 4.4.0-141-generic  etcd:etcd-v3.2.24  docker: 18.06.1-ce  kubelet:1.13.1

etcd叢集上一章節已經寫過這裡不過多說明,etcd採用三臺機器自帶高可用,master採用keepalived三臺高可用,etcd及master共用機器,機器資源充足可將master單獨部署,官方建議最少機器配置2G

172.16.10.1  etcd master keepalived

172.16.10.2  etcd master keepalived

172.16.10.3  etcd master keepalived

172.16.10.4  node

172.16.10.5  node

172.16.10.6  node

172.16.10.210  vip

1.安裝前準備

關閉selinux  防火牆  swap分割槽(否則在init初始化無法進行),準備工作較為基礎此處不過多編寫

$ vi /etc/sysctl.d/k8s-sysctl.conf
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
$ sysctl -p /etc/sysctl.d/k8s-sysctl.conf
 

2.安裝docker

#Ubuntu安裝dcoker儲存庫
apt-get install -y apt-transport-https ca-certificates curl software-properties-common

#新增Docker官方的GPG金鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 

非必須,視情況而定

此處由於網路問題沒有辦法線上新增,可將gpg檔案下載下來匯入

sudo apt-key add apt-key.gpg

 

#設定stable儲存庫
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

#更新apt包索引
apt-get update

#安裝docker最新版本18.06
apt install docker-ce=18.06.1~ce~3-0~ubuntu

 

3.安裝kubeadm,kubelet和kubectl(建議版本號與Kubernetes的版本匹配

apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
 
4.配置主節點上的kubelet使用的cgroup驅動程式(小坑,前面版本的部署基本都沒怎麼配置docker驅動和kubelet都是一致的,這裡忽略了導致後面出現的報錯且日誌中沒有反饋這方面報錯資訊)
dcoker info檢視下驅動,修改/etc/default/kubelet
我這裡是cgroupfs ,保證驅動一致,多說一句很多文件對這裡沒有提到,1.13和以前在這裡配置略微不同,老版本這裡都是修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf配置就可以,kubelet預設驅動配置是system
cat /etc/defaule/kubelet
KUBELET_EXTRA_ARGS=--cgroup-driver=cgroupfs
 
需要重新啟動kubelet
systemctl daemon-reload
systemctl restart kubelet
 
5.如果需要控制控制單臺計算機上的所有節點,則需要SSH,這裡不過多說明,自行搜尋配置
 
6.三臺master節點搭建keepalived
#安裝依賴

apt-get install libssl-dev openssl libpopt-dev -y

#安裝keepalived包

apt-get install keepalived –y

 

#修改配置

master1

vrrp_instance VI_1 {
     state MASTER  #master節點需修改
     interface ens160  #檢視本機網絡卡名
     virtual_router_id 51
     priority 100    #權重設定優先順序
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111  #需要相同
     }
     virtual_ipaddress {
         172.16.10.210  #vip
     }
}

 

master2

vrrp_instance VI_1 {
     state BACKUP
     interface ens160
     virtual_router_id 51
     priority 90
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         172.16.10.210
     }
}

 

master3

vrrp_instance VI_1 {
     state BACKUP
     interface ens160
     virtual_router_id 51
     priority 80
     advert_int 1
     authentication {
         auth_type PASS
         auth_pass 1111
     }
     virtual_ipaddress {
         172.16.10.210
     }
}

 

啟動三臺機器的keepalived

systemctl start keepalived

檢視vip是否在繫結的網絡卡下,可關閉其中一臺機器的keepalived服務,vip是否漂移到其他機器

 
7.建立一個初始化配置檔案kubeadm-config.yml,採用flannel網路(視自身情況)
 

apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.13.1      # kubernetes的版本
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
controlPlaneEndpoint: "172.16.10.210:6443"
apiServer:
   certSANs:
   - 172.16.10.1
   - 172.16.10.2
   - 172.16.10.3
   - 172.16.10.210
   - 127.0.0.1
etcd:    #ETCD的地址
   external:
     endpoints:
     - http://172.16.10.1:2379
     - http://172.16.10.2:2379
     - http://172.16.10.3:2379
networking:
   podSubnet: 10.244.0.0/16      # pod網路的網段flannel,如其他網路可視自身情況

 

8.初始化init


kubeadm init --config=kubeadm-config.yml

初始化大概持續10分鐘左右名主要下載映象,可提前下載

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6

 

image

出現上圖所示,證明初始化成功

保留token,已便後面新增節點用

kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
kubeadm token list(可檢視生成的token)
 
執行以下命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
安裝網路元件flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml
 
檢視節點狀態
kubectl get node
image
 
kubectl get pod --all-namespaces
image
這裡master節點安裝完成,如果pod狀態不是running檢視系統日誌或者使用kubectl describe pod –n kube-system+pod名檢視
 
9.將證書檔案從第一個master節點複製到其餘master節點,叢集etcd採用的是http沒有加證書
USER=root # customizable
CONTROL_PLANE_IPS="172.16.10.2 172.16.10.3"
for host in ${CONTROL_PLANE_IPS}; do
    scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:
    scp /etc/kubernetes/pki/ca.key "${USER}"@$host:
    scp /etc/kubernetes/pki/sa.key "${USER}"@$host:
    scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:
    scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:
    scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:
    #scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt
    #scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
    scp /etc/kubernetes/admin.conf "${USER}"@$host:
done

 

其他master節點操作

USER=root # customizable
mkdir -p /etc/kubernetes/pki/etcd
mv /home/${USER}/ca.crt /etc/kubernetes/pki/
mv /home/${USER}/ca.key /etc/kubernetes/pki/
mv /home/${USER}/sa.pub /etc/kubernetes/pki/
mv /home/${USER}/sa.key /etc/kubernetes/pki/
mv /home/${USER}/front-proxy-ca.crt /etc/kubernetes/pki/
mv /home/${USER}/front-proxy-ca.key /etc/kubernetes/pki/
mv /home/${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt
mv /home/${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key
mv /home/${USER}/admin.conf /etc/kubernetes/admin.conf
 
執行kubeadm join啟動
kubeadm join 172.16.10.210:6443 --token r2tshb.svfb47rz7fdg874p --discovery-token-ca-cert-hash sha256:b2721cafb1e3979b19040aeebc544277998e15b683c93ee7360b28d363473c9a
 
其餘節點重複上述操作。
 
node節點加入叢集執行kubeadm join,如果出現報錯想要初始化init執行kubeadm reset