它在设计上并不为您安装网络解决方案,这意味着您必须使用kubectl apply自行安装第三方符合CNI的网络解决方案
初始化master
[root@aniu-k8s ~]# kubeadm init --kubernetes-version=v1.9.21
要让kubectl为非root用户工作,您可能需要运行以下命令(这也是kubeadm init输出的一部分):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看集群状态
[root@aniu-k8s ~]# kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
安装pod network
仅在Master节点执行,网络必须在任何应用程序之前部署。而且,kube-dns是一个内部帮助服务,在安装网络之前不会启动。 kubeadm仅支持基于容器网络接口(CNI)的网络(并且不支持kubenet)
安装Flannel
# 将桥接的IPv4流量传递给iptables的链
sysctl net.bridge.bridge-nf-call-iptables=1
#
[root@aniu-k8s ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.9.1/Documentation/kube-flannel.yml
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
clusterrole "flannel" created
clusterrolebinding "flannel" created
serviceaccount "flannel" created
configmap "kube-flannel-cfg" created
daemonset "kube-flannel-ds" created
一旦安装了pod网络,就可以通过在kubectl get pods –all-namespaces的输出中检查kube-dns pod是否正在运行来确认它正在工作。 一旦kube-dns吊舱启动并运行,您可以继续加入您的节点
[root@aniu-k8s ~]# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-aniu-k8s 1/1 Running 0 1h
kube-system kube-apiserver-aniu-k8s 1/1 Running 0 1h
kube-system kube-controller-manager-aniu-k8s 1/1 Running 0 1h
kube-system kube-dns-6f4fd4bdf-2428k 0/3 ContainerCreating 0 1h
kube-system kube-flannel-ds-2h2c6 0/1 CrashLoopBackOff 3 1m
kube-system kube-proxy-wt74z 1/1 Running 0 1h
kube-system kube-scheduler-aniu-k8s 1/1 Running 0 1h
注意:笔者安装pod network采用flannel有问题,故换成Weave Net
export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
Master Isolation
使用kubeadm初始化的集群,出于安全考虑Pod不会被调度到Master Node上,可使用如下命令使Master节点参与工作负载。:
[root@aniu-k8s ~]# kubectl taint nodes --all node-role.kubernetes.io/master-
node "aniu-k8s" untainted
查看节点状态
[root@aniu-k8s ~]# kubectl get pod --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
kube-system etcd-aniu-k8s 1/1 Running 0 49m 192.168.10.10 aniu-k8s
kube-system kube-apiserver-aniu-k8s 1/1 Running 0 49m 192.168.10.10 aniu-k8s
kube-system kube-controller-manager-aniu-k8s 1/1 Running 0 49m 192.168.10.10 aniu-k8s
kube-system kube-dns-6f4fd4bdf-n4ctn 3/3 Running 0 50m 10.32.0.2 aniu-k8s
kube-system kube-proxy-s5pnl 1/1 Running 0 47m 192.168.0.209 aniu-saas-4
kube-system kube-proxy-szs7k 1/1 Running 0 50m 192.168.10.10 aniu-k8s
kube-system kube-scheduler-aniu-k8s 1/1 Running 0 49m 192.168.10.10 aniu-k8s
kube-system weave-net-bkbs2 2/2 Running 0 49m 192.168.10.10 aniu-k8s
kube-system weave-net-cwvdk 2/2 Running 0 47m 192.168.0.209 aniu-saas-4
# 可以看到全部的pod已经全部running
向K8s集群中加入节点