1. 程式人生 > >Centos7手工安裝Kubernetes集群

Centos7手工安裝Kubernetes集群

導致 emc RR arc port yum安裝 手工 sched 創建

安裝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集群