Centos7手工安裝Kubernetes集群
安裝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" 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 配置
Etcd的配置:
etcdctl set /coreos.com/network/config ‘{"Network":"192.168.0.0/16"}‘
配置flannel配置文件:
vim /etc/sysconfig/flannel
systemctl enable flanneld
systemctl start flannel
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的集群部署。
Centos7手工安裝Kubernetes集群