参照Ubuntu-18.04使用kubeadm安装kubernetes-1.12.0的4.1(含)章节以前的步骤部署好amd64架构的kubernetes master节点。
flannel的部署只会初始化一些cni的配置文件,并不会部署cni的可执行文件,需要手动部署,所以flannel部署分为两步:
1.创建cni插件目录
sudo mkdir -p /opt/cni/bin
cd /opt/cni/bin
2.到release页面下载二进制文件
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
添加了如下插件:
[docker@k8s ]$ 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
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/
参照树莓派3B+使用kubeadm部署kubernetes-1.12.0前三章部署好基础环境
将arm架构的树莓派加入已建好的x64架构kubernetes-master节点,组成异构集群,使用x64架构的master管理arm架构的开发版节点。
看一下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
flannel的部署只会初始化一些cni的配置文件,并不会部署cni的可执行文件,需要手动部署,所以flannel部署分为两步:
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
添加了如下插件:
[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
4.将master节点上的/etc/cni文件夹拷贝到开发版相同目录。
只要下载好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
$ 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
在笔记本的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
效果:
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!