第四步:樹莓派Kubernetes集羣安裝

原文鏈接:https://blog.csdn.net/liukuan73/article/details/83150473

4. Kubernetes集羣安裝


4.1 master節點部署
4.1.1 提前下載所需鏡像

看一下kubernetes v1.15.1需要哪些鏡像:

$ kubeadm config images list --kubernetes-version=v1.15.1

k8s.gcr.io/kube-apiserver:v1.15.1
k8s.gcr.io/kube-controller-manager:v1.15.1
k8s.gcr.io/kube-scheduler:v1.15.1
k8s.gcr.io/kube-proxy:v1.15.1
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1


備註:

1.12.0版本之前,鏡像形式是需要帶體系結構名的:鏡像前綴-${ARCH}:tag,如k8s.gcr.io/kube-proxy-arm:v1.11.2,從1.12.0開始,不再帶體系結構名。但是後來發現使用不帶體系結構的鏡像是不行的,會報錯standard_init_linux.go:190: exec user process caused "exec format error",還是要用帶-arm的鏡像。
默認會使用coredns,但是coredns目前沒有1.2.2版的arm架構鏡像,所以通過指定--feature-gates CoreDNS=false來使用kubedns(1.15.1版本執行會提示feature-gate key is deprecated: CoreDNS;命令執行失敗,暫時先按照所有資源拉取鏡像)


1.由於gcr.io被牆,從阿里雲鏡像地址下載:

sudo docker pull registry.us-west-1.aliyuncs.com/mayi_space/kube-apiserver:v1.15.1
sudo docker pull registry.us-west-1.aliyuncs.com/mayi_space/kube-controller-manager:v1.15.1
sudo docker pull registry.us-west-1.aliyuncs.com/mayi_space/kube-scheduler:v1.15.1
sudo docker pull registry.us-west-1.aliyuncs.com/mayi_space/kube-proxy:v1.15.1
sudo docker pull registry.us-west-1.aliyuncs.com/mayi_space/pause:3.1
sudo docker pull registry.us-west-1.aliyuncs.com/mayi_space/etcd:3.3.10
sudo docker pull registry.us-west-1.aliyuncs.com/mayi_space/coredns:1.3.1



2.重新打回k8s.gcr.io的鏡像tag:
由於yaml文件裏指定的鏡像都不帶-arm,所以,還需要將鏡像中的-arm去掉

sudo docker tag registry.us-west-1.aliyuncs.com/mayi_space/kube-apiserver:v1.15.1 k8s.gcr.io/kube-apiserver:v1.15.1
sudo docker tag registry.us-west-1.aliyuncs.com/mayi_space/kube-controller-manager:v1.15.1 k8s.gcr.io/kube-controller-manager:v1.15.1
sudo docker tag registry.us-west-1.aliyuncs.com/mayi_space/kube-scheduler:v1.15.1 k8s.gcr.io/kube-scheduler:v1.15.1
sudo docker tag registry.us-west-1.aliyuncs.com/mayi_space/kube-proxy:v1.15.1 k8s.gcr.io/kube-proxy:v1.15.1
sudo docker tag registry.us-west-1.aliyuncs.com/mayi_space/pause:3.1 k8s.gcr.io/pause:3.1
sudo docker tag registry.us-west-1.aliyuncs.com/mayi_space/etcd:3.3.10 k8s.gcr.io/etcd:3.3.10
sudo docker tag registry.us-west-1.aliyuncs.com/mayi_space/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1



4.1.2 kubeadm init初始化集羣
1.加載所需的內核模塊:

$ sudo modprobe br_netfilter


設置開機自動加載,打開/etc/rc.local,加入如下內容:

modprobe br_netfilter


2.部署:

sudo kubeadm init --apiserver-advertise-address=192.168.1.101 --pod-network-cidr=172.16.0.0/16 --service-cidr=10.233.0.0/16 --kubernetes-version=v1.15.1 --feature-gates CoreDNS=false



3.部署成功會輸出如下內容:

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 192.168.1.192:6443 --token gomx6b.u5or5yxkm8orths8 --discovery-token-ca-cert-hash sha256:24fa1c34e97b14f85b06726e5f4d1987c61da978e2f740d829280a84f54aa8f2


記下其中的token,加入node節點時會用到。

備註:

確保沒有設置http_proxy和https_proxy代理,kubeadm init過程首先會檢查代理服務器,確定跟kube-apiserver等的 http/https 連接方式,如果有代理設置可能會有問題導致不能訪問自身和內網。 需要在/etc/profile中增加kubeadm init指定的apiserver-advertise-address、pod-network-cidr、service-cidr三個地址段到no_proxy裏後重試:export no_proxy=10.142.232.155,192.168.0.0/16,10.233.0.0/16
集羣初始化如果遇到問題,可以使用下面的命令進行清理再重新初始化:
sudo kubeadm reset


4.1.3 檢查kubelet使用的cgroup driver
kubelet啓動時指定的cgroup driver需要和docker所使用的保持一致。

1.查看 Docker 使用的 cgroup driver:

$ docker info | grep -i cgroup
-> Cgroup Driver: cgroupfs



可以看出docker 17.03默認使用的Cgroup Driver爲cgroupfs。

2.查看kubelet指定的cgroup driver

Kubernetes文檔中kubelet的啓動參數--cgroup-driver string Driver that the kubelet uses to manipulate cgroups on the host. Possible values: 'cgroupfs', 'systemd' (default "cgroupfs")。默認值爲cgroupfs。yum安裝kubelet、kubeadm時生成10-kubeadm.conf文件中可能將這個參數值改成了systemd。

查看kubelet的配置文件(1.12.0版本的封裝在/var/lib/kubelet/kubeadm-flags.env文件中),如果是默認的cgroupfs,不需要修改。否則需要修改/etc/default/kubelet(或者/var/lib/kubelet/kubeadm-flags.env)文件:

$ sudo vim /etc/default/kubelet
    KUBELET_KUBEADM_EXTRA_ARGS=--cgroup-driver=<value>    
$ sudo systemctl daemon-reload
$ sudo systemctl restart kubelet



參考:https://kubernetes.io/docs/setup/independent/install-kubeadm/#configure-cgroup-driver-used-by-kubelet-on-master-node

4.1.4 創建kubectl使用的kubeconfig文件

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config



創建完成即可使用kubectl操作集羣。

4.1.5 設置master參與工作負載
使用kubeadm初始化的集羣,將master節點做了taint(污點),使得默認情況下(不設置容忍)Pod不會被調度到master上。這裏搭建的是測試環境可以使用下面的命令去掉master的taint,使master參與工作負載:

$ kubectl taint nodes --all node-role.kubernetes.io/master-
 node/raspberrypi untainted


備註:

本部分參考:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/

4.2 網絡部署
可以選擇不同的網絡插件,但是calico目前沒有32位arm的鏡像(只有arm64),本文介紹flannel的部署。

4.2.1 flannel網絡部署
flannel的部署只會初始化一些cni的配置文件,並不會部署cni的可執行文件,需要手動部署,所以flannel部署分爲兩步:

CNI插件部署
flannel組價部署
步驟一.CNI插件部署(所有節點)
1.創建cni插件目錄

sudo mkdir -p /opt/cni/bin && cd /opt/cni/bin



2.到release頁面下載arm架構二進制文件

wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-arm-v0.7.1.tgz


3.在/opt/cni/bin目錄下解壓即安裝好

sudo tar -zxvf cni-plugins-arm-v0.7.1.tgz


添加了如下插件:

[docker@k8s ]$ ll /opt/cni/bin
總用量 60032
-rwxr-xr-x 1 root root  3653505 4月  12  2018 bridge
-rw-r--r-- 1 pi   pi   16051784 9月  27 17:37 cni-plugins-arm-v0.7.1.tgz
-rwxr-xr-x 1 root root  8843152 4月  12  2018 dhcp
-rwxr-xr-x 1 root root  2600302 4月  12  2018 flannel
-rwxr-xr-x 1 root root  2886491 4月  12  2018 host-device
-rwxr-xr-x 1 root root  2812425 4月  12  2018 host-local
-rwxr-xr-x 1 root root  3300255 4月  12  2018 ipvlan
-rwxr-xr-x 1 root root  2819115 4月  12  2018 loopback
-rwxr-xr-x 1 root root  3303763 4月  12  2018 macvlan
-rwxr-xr-x 1 root root  3232319 4月  12  2018 portmap
-rwxr-xr-x 1 root root  3651705 4月  12  2018 ptp
-rwxr-xr-x 1 root root  2392245 4月  12  2018 sample
-rwxr-xr-x 1 root root  2602702 4月  12  2018 tuning
-rwxr-xr-x 1 root root  3300211 4月  12  2018 vlan


步驟二.flannel部署
1.獲取yaml文件

$ wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml


2.修改配置文件
<1>保留arm的daemonset,刪除其他架構的daemonset
<2>修改其中net-conf.json中的Network參數使其與kubeadm init時指定的--pod-network-cidr保持一致。
<2>這裏v0.10.0版有一個bug,需要爲啓動flannel的daemonset添加toleration,以允許在尚未Ready的節點上部署flannel pod:

      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      #添加下面這個toleration
      - key: node.kubernetes.io/not-ready
        operator: Exists
        effect: NoSchedule



可以參考這個issue:https://github.com/coreos/flannel/issues/1044

3.提前下載所需鏡像
下載arm架構的鏡像,並重新打tag成x64的,以騙過daemonset:

docker pull fishead/quay.io.coreos.flannel:v0.10.0-arm
docker tag fishead/quay.io.coreos.flannel:v0.10.0-arm quay.io/coreos/flannel:v0.10.0-arm


4.部署

kubectl apply -f kube-flannel.yml


部署好後集羣就可以正常運行了。


備註:

假如網絡部署失敗或出問題需要重新部署,執行以下內容清除生成的網絡接口:
sudo ifconfig cni0 down
sudo ip link delete cni0
sudo ifconfig flannel.1 down
sudo ip link delete flannel.1
sudo rm -rf /var/lib/cni/

4.3 slave節點部署
同樣按照上述步驟安裝好docker、kubelet,然後在slave節點上執行以下命令即可加入集羣:

kubeadm join 192.168.1.192:6443 --token 4k5jyn.2ss2zcn44c7e7zc1 --discovery-token-ca-cert-hash sha256:0e3e9348b5372aceedab8ca5f3e6537d5eaf7134dce24523f512c0ef2f1a54f6


 

--------------------- 
版權聲明:本文爲CSDN博主「liukuan73」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/liukuan73/article/details/83150473

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章