Centos7手工安裝Kubernetes叢集

衡子發表於2018-05-26

安裝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的叢集部署。

相關文章