從頭搭建kubernetes

jopen 9年前發布 | 58K 次閱讀 Kubernetes

自己參照網上文檔,把kubernetes搭了一遍,做個筆記。有幾個坑,自己踩了,記錄下,避免其他人接著踩。文章最末尾有記錄自己碰到的錯誤以及解決辦法。
用的軟件版本:
centos 7.1
docker 1.8.2
etcd 0.4.6
kubernetes v1.0.0
使用兩臺機器VM1(192.168.132.129)和VM2(192.168.132.130)
VM1作為master,VM2作為minion
注:kubernetes不提供網絡解決方案,要確保master和所有minion的容器能互相通信,需要提供網絡解決方案。比較常用的是 etcd+flannel,這里我沒有使用etcd+flannel的方案,而是通過將master和mimion主機間添加路由來解決的。具體的解決辦法參見
http://dockone.io/article/466, 感謝吳健@Georce
整個安裝步驟有參考帖子的http://my.oschina.net/xue777hu ... ZKgLT 這個好像是林帆寫的,感謝這個作者。

具體步驟:

1.在master和minion上安裝docker

yum -y install docker-1.8.2
systemctl restart docker.service

注:請確認docker正確運行了,如docker search centos有結果,即OK

2. 在master和mimion上添加yum源

vi /etc/yum.repo.d/virt7.repo
[virt7-testing]
name=virt7-testing
baseurl=http://cbs.centos.org/repos/virt7-common-release/x86_64/os/
gpgcheck=0

3.在master+minion兩個機器上運行

yum -y install --enablerepo=virt7-testing kubernetes


4.檢查etcd的版本是否為 0.4.6, 如果不是,則刪除etcd并且從rpm安裝:

yum erase etcd
yum install http://cbs.centos.org/kojifiles/packages/etcd/0.4.6/7.el7.centos/x86_64/etcd-0.4.6-7.el7.centos.x86_64.rpm


5.配置master和minion兩服務器的config文件內容如下

vim /etc/kubernetes/config
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow_privileged=false"
KUBE_MASTER="--master=http://192.168.132.129:8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.132.129:4001"

注:

1)由于kubernetes的版本問題,在1.0版本以后,KUBE_ETCD_SERVERS里面監聽的端口默認是2379,這里改回4001,因為etcd默認是監聽這個。
2)由于版本問題,KUBE_MASTER這個值也可能出現在/etc/kubernetes/apiserver文件里面。

6.修改master+minion的apiserver文件

vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.132.129:4001"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

7.設置minion端的kubelet文件

vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname_override=192.168.132.130"
KUBELET_API_SERVER="--api_servers=http://192.168.132.129:8080"
KUBELET_ARGS=""

8.重啟master端的相關服務

for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler kube-proxy; do 
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES 
done

9.重啟minion端的相關服務

for SERVICES in kube-proxy kubelet docker; do 
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES 
done

10.驗證

在master服務器上執行kubectl get no,如果有結果,那么表示成功
[root@wydataguard2 kubernetes]# kubectl get no
NAME LABELS STATUS
192.168.132.130 kubernetes.io/hostname=192.168.132.130 Ready

11.參考文檔

http://my.oschina.net/xue777hu ... ZKgLT ###林帆的安裝說明,有使用flannel
http://www.fangyunlin.com/ ###方云麟老師的博客,非常詳細
http://kubernetes.io/

12碰到的問題

問題一:Unable to generate self signed cert: mkdir /var/run/kubernetes: permission denied
解決辦法:

vim /usr/lib/systemd/system/kube-apiserver.service

[Service]

PermissionsStartOnly=true

ExecStartPre=-/usr/bin/mkdir /var/run/kubernetes

ExecStartPre=/usr/bin/chown -R kube:kube /var/run/kubernetes/

 systemctl daemon-reload

 systemctl restart kube-apiserver</pre>

問題二:/api/v1/namespaces: dial tcp 192.168.132.129:8080: connection refused
解決辦法:
這個是kubernetes不能確定真正的master,需要確認master跟minion兩個機器上的/etc/kubernetes/config 和/etc/kubernetes/apiserver兩個文件里的KUBE_MASTER="--master=http://192.168.132.129:8080"這條是唯一的,不要默認的KUBE_MASTER="--master=http://127.0.0.1:8080"這個值。由于kubernets的版本問題,KUBER_MASTER這個值可能出現在config文件,也可能出現在apiserver這個文件,所以兩個文件都要看。

來自:http://dockone.io/article/901

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!