安裝Kubernetes叢集有多種方式,前面介紹了Kubeadm的方式,本文將介紹手工安裝的方法。
安裝環境有3臺Azure上的VM:
Hkube01:10.0.1.4 Hkube02:10.0.1.5 Hbube03:10.0.1.6
其中hkube01是Master節點,將會安裝docker, etcd, Kubernetes master, flannel所需要的元件;
Hkube02和hkube03是worker節點,將會安裝docker, kubernetes node, flannel所需要的元件。
安裝過程如下:
一 master節點
1 安裝軟體
yum install -y docker etcd kubernetes-master
2 配置啟動docker
由於docker-hub的站點在國外,下載會非常慢,把docker下載指向國內的映象站點:
vim /etc/docker/daemon.json {"registry-mirrors": ["registry.docker-cn.com"]} systemctl enable docker systemctl start docker
3 配置啟動etcd
Etcd和zookeeper類似,是儲存key/value的工具。
cd /etc/etcd vim etcd.conf ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_NAME="master" ETCD_ADVERTISE_CLIENT_URLS=http://10.0.1.4:2379 systemctl enable etcd systemctl start etcd
4 配置kubernetes
在/etc/kubernetes目錄中,有4個配置檔案:
需要配置apiserver和config兩個配置檔案。Controller-manager和scheduler不需要配置。
配置apiserver,需要指定etcd地址、api-server的埠、提供服務的地址和cluster的ip範圍:
vim /etc/kubernetes/apiserver KUBE_API_PORT="--port=8080" KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.1.4:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.0.0.0/16" KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
本文不設計Kubernetes的安全問題,所以在api-server的配置中的admission_control中去掉了和安全相關的內容SecurityContextDeny,ServiceAccount。
配置config,需要指定kubernetes master的地址和埠:
vim /etc/kubernetes/config KUBE_MASTER="--master=http://10.0.1.4:8080"
5 啟動服務
systemctl enable kube-apiserver kube-controller-manager kube-scheduler systemctl start kube-apiserver kube-controller-manager kube-scheduler systemctl status kube-apiserver kube-controller-manager kube-scheduler
二 node節點
1 安裝軟體
yum install -y docker kubernetes-node
2 配置啟動docker
和master節點相同:
vim /etc/docker/daemon.json {"registry-mirrors": ["registry.docker-cn.com"]} systemctl enable docker systemctl start docker
3 配置kubelet
在/etc/kubernetes下有3個配置檔案:
需要配置config和kubelet兩個配置檔案,proxy是kube-proxy的配置檔案,保留預設就可以。
配置config,需要指定kubernetes master的地址和埠:
vim /etc/kubernetes/config KUBE_MASTER="--master=http://10.0.1.4:8080"
配置kubelet,指定其工作地址、本機註冊到master時的名稱、master的地址和埠:
vim /etc/kubernetes/kubelet KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_HOSTNAME="--hostname-override=hkube02" KUBELET_API_SERVER="--api-servers=http://10.0.1.4:8080"
另外由於centos的yum源指定的pod-infrastructure的docker映象需要redhat的證書,會導致安裝不成功。為避免這個問題,我們把kubelet中的這個映象更改成docker-hub中的映象。
先搜尋一下:
docker search pod-infrastructure
選擇一個更改,我選擇了最後一個:
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image= docker.io/zengshaoyong/pod-infrastructure:latest "
4 啟動服務
systemctl enable kubelet kube-proxy systemctl start kubelet kube-proxy systemctl status kubelet kube-proxy
5 檢查
在master節點上檢視:
已經看到hkube02和hkube03都註冊上來了。
建立一個deployment:
kubectl run nginx --image=nginx
kubectl scale deployment nginx --replicas=3
但網路層面pod只能和本node的其他pod連通。
三 網路
本文將安裝flannel,實現跨節點的容器互通。
1 安裝
yum install -y flannel
2 配置
在master節點進行Etcd的配置:
etcdctl set /coreos.com/network/config '{"Network":"192.168.0.0/16"}'
在所有node節點上配置flannel配置檔案:
vim /etc/sysconfig/flanneld
systemctl enable flanneld
systemctl start flanneld
systemctl restart docker
開啟轉發:
iptables -P FORWARD ACCEPT
此時可以看到docker0的地址和flannel的埠地址網段相同:
3 驗證
部署pod nginx:
kubectl run nginx --image nginx kubectl scale deployment nginx --replicas=3
登入到hkube03,進入到容器:
通過部署flannel,可以實現各個pod間的網路互通。
總結:
在Centos7上,通過yum安裝Kubernetes的各個元件,實現Kubernetes的叢集部署。