使用amd64架構master節點管理arm架構kubernetes叢集
1. master節點部署
1.1 基礎部署
1.2 網路部署
1.2.1 flannel網路部署
flannel的部署只會初始化一些cni的配置檔案,並不會部署cni的可執行檔案,需要手動部署,所以flannel部署分為兩步:
- CNI外掛部署
- flannel組價部署
步驟一.CNI外掛部署(所有節點)
1.建立cni外掛目錄
sudo mkdir -p /opt/cni/bin
cd /opt/cni/bin
sudo wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz
3.在/opt/cni/bin目錄下解壓即安裝好
sudo tar -zxvf cni-plugins-amd64-v0.7.1.tgz
添加了如下外掛:
[[email protected] ]$ ll /opt/cni/bin 總用量 65716 -rwxr-xr-x 1 root root 4028260 4月 12 17:21 bridge -rwxr-xr-x 1 root root 10232415 4月 12 17:22 dhcp -rwxr-xr-x 1 root root 2856252 4月 12 17:21 flannel -rwxr-xr-x 1 root root 3127363 4月 12 17:21 host-device -rwxr-xr-x 1 root root 3036768 4月 12 17:22 host-local -rwxr-xr-x 1 root root 3572685 4月 12 17:21 ipvlan -rwxr-xr-x 1 root root 3084347 4月 12 17:21 loopback -rwxr-xr-x 1 root root 3613497 4月 12 17:21 macvlan -rwxr-xr-x 1 root root 3550877 4月 12 17:21 portmap -rwxr-xr-x 1 root root 3993428 4月 12 17:21 ptp -rwxr-xr-x 1 root root 2641877 4月 12 17:22 sample -rwxr-xr-x 1 root root 2850029 4月 12 17:21 tuning -rwxr-xr-x 1 root root 3568537 4月 12 17:21 vlan
步驟二.flannel部署
1.獲取yaml檔案
$ wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
2.修改配置檔案
<1>修改其中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
<3>將原有的nodeSelector註釋掉,允許在包括arm架構的板子上部署flannel
# nodeSelector:
# beta.kubernetes.io/arch: amd64
3.映象下載
master節點上下載yaml檔案中所需amd64架構的映象。quay.io映象被牆下不了可以從這裡下載, 之後再打回原tag。
docker pull jmgao1983/flannel:v0.10.0-amd64
docker tag jmgao1983/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64
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/
2. slave節點部署
2.1 基礎部署
2.2 構建Kubernetes叢集
將arm架構的樹莓派加入已建好的x64架構kubernetes-master節點,組成異構叢集,使用x64架構的master管理arm架構的開發版節點。
2.2.1 提前下載所需映象
看一下kubernetes v1.12.0需要哪些映象:
$ kubeadm config images list --kubernetes-version=v1.12.0 --feature-gates CoreDNS=false
k8s.gcr.io/kube-apiserver:v1.12.0
k8s.gcr.io/kube-controller-manager:v1.12.0
k8s.gcr.io/kube-scheduler:v1.12.0
k8s.gcr.io/kube-proxy:v1.12.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.2.24
k8s.gcr.io/k8s-dns-kube-dns:1.14.13
k8s.gcr.io/k8s-dns-sidecar:1.14.13
k8s.gcr.io/k8s-dns-dnsmasq-nanny:1.14.13
slave節點只需要kube-proxy和pause這兩個映象就行了。
備註:
- 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.由於gcr.io被牆,從anjia0532映象地址下載:
docker pull anjia0532/google-containers.kube-proxy-arm:v1.12.0
docker pull anjia0532/google-containers.pause-arm:3.1
2.重新打回k8s.gcr.io的映象tag:
由於yaml檔案裡指定的映象都不帶-arm,所以,還需要將映象中的-arm去掉
docker tag anjia0532/google-containers.kube-proxy-arm:v1.12.0 k8s.gcr.io/kube-proxy:v1.12.0
docker tag anjia0532/google-containers.pause-arm:3.1 k8s.gcr.io/pause:3.1
2.2.2 flannel網路元件部署
flannel的部署只會初始化一些cni的配置檔案,並不會部署cni的可執行檔案,需要手動部署,所以flannel部署分為兩步:
- CNI外掛部署
- flannel組價部署
步驟一.CNI外掛部署(所有節點)
1.建立cni外掛目錄
sudo mkdir -p /opt/cni/bin && cd /opt/cni/bin
2.到release頁面下載arm架構二進位制檔案
sudo 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
添加了如下外掛:
[[email protected] ]$ 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
4.將master節點上的/etc/cni資料夾拷貝到開發版相同目錄。
步驟二.flannel部署
只要下載好flannel所需映象就可以了,daemonset啟動的flannel會自動在開發板上建立好flannel pod。
下載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-amd64
2.3 kubeadm join加入叢集
$ sudo kubeadm join 192.168.1.175:6443 --token c6bo2p.zxkibq1kabcatnfr --discovery-token-ca-cert-hash sha256:e0ab2c29fe3bc09a6a981c102e68fd312dba64443ac5642d9e0c5c37c915f0b2 --ignore-preflight-errors RequiredIPVSKernelModulesAvailable
備註:其中的token,是建立master節點時生成的。
加入成功顯示如下資訊:
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the master to see this node join the cluster.
此時在master節點可以看到樹莓派接入進來了,並執行正常:
再給樹莓派設定一下角色:
$ kubectl label node raspberrypi node-role.kubernetes.io/node=
備註:
- 確保沒有設定http_proxy和https_proxy代理
- 加入節點如果遇到問題,可以使用下面的命令進行清理再重新初始化:
sudo kubeadm reset
3.試用
在筆記本的master節點往arm節點發佈一個nginx試試:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-test
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx-test
---
apiVersion: v1
kind: Service
metadata:
name: nginx-test
spec:
ports:
- name: nginx-test
port: 80
targetPort: 80
selector:
app: nginx
效果:
更多精彩內容,請訂閱本人微信公眾號:K8SPractice
如果覺得我的文章對您有用,請隨意打賞。您的支援將鼓勵我繼續創作!
支付寶: