源碼安裝kubernetes并搭建基于CA認(rèn)證的集群

搭建一個(gè)kubernetes集群對(duì)于新手來(lái)說(shuō)比較困惑,感覺(jué)很難入手,雖然kubernetes官方提供了minikube來(lái)快速搭建一個(gè)單機(jī)版的集群。希望這篇文章對(duì)你有所幫助,本文描述了kubernetes的編譯和多節(jié)點(diǎn)集群的搭建步驟基于ubuntu14.04 x86系統(tǒng),為了方便,kubernetes的各個(gè)組件是運(yùn)行在docker容器中的。
搭建集群需要提前安裝好docker, etcd, Go(編譯使用)
1)安裝docker的步驟略過(guò),網(wǎng)上資料很多。
2)安裝Go的步驟也略過(guò)吧:)
3)編譯kubernetes:
從github上clone源碼到你的GOPATH目錄下的src/k8s.io(需要提前創(chuàng)建)目錄下,

git clone https://github.com/kubernetes/kubernetes.git

然后cdkubernetes目錄下,首先下載編譯需要的第三方包(注意這里會(huì)有坑,你懂的,如果下載不下來(lái),那就自行百度吧,我是不是該把那些包也貼出來(lái), 哈哈。。。),然后直接make編譯就好。

cd kubernetes
go get ./...
make build

大約5分鐘編譯完成,這時(shí)ls一下會(huì)發(fā)現(xiàn)多了一個(gè)_output目錄,對(duì),我們要的就是它,這些個(gè)二進(jìn)制文件。進(jìn)入_output/bin目錄,找到hyperkube 這個(gè)二進(jìn)制文件(這個(gè)二進(jìn)制文件包含了kubernetes各個(gè)組件的可執(zhí)行文件,有它就足夠了),完成。
我們找到了二進(jìn)制文件,可是如何讓它們?cè)谌萜髦羞\(yùn)行呢?不用擔(dān)心,kubernetes已經(jīng)提供編譯hyperkube鏡像的文件,還有etcd的,下面會(huì)講到。
編譯hyperkube鏡像:
kubernetes目錄下有個(gè)cluster文件夾,然后你會(huì)發(fā)現(xiàn)它下面還有個(gè)images,對(duì),你猜對(duì)了,就在這里:

cluster/images/hyperkube
make build VERSION=xxx ARCH=amd64

編譯完成后,你會(huì)發(fā)現(xiàn)你的docker images 里有了hyperkube鏡像。
同理,編譯etcd

cd cluster/images/etcd
make build ARCH=amd64

4)到此,所需的組件已經(jīng)準(zhǔn)備好,我們開(kāi)始搭建多節(jié)點(diǎn)的集群,多節(jié)點(diǎn)跨主機(jī),主要需要注意網(wǎng)絡(luò)那一塊,kubernetes的集群是扁平管理的,就是說(shuō)在不同節(jié)點(diǎn)上的容器可以相互ping通。我用的是flannel,關(guān)于flannel的安裝和使用,請(qǐng)參考后續(xù)章節(jié)。
下面貼出主要的組件配置,僅供參考。hostIP 表示master所在主機(jī)的IP,xxx:xx表示你編譯好的hyperkube鏡像,
首先啟動(dòng)etcd

docker run -d -p 4001:4001 -v /var/etcd/data:/var/etcd/data -name etcd xxx:xx etcd \
-name etcd0 -data-dir /var/etcd/data -advertise-client-urls hostIP:4001 -listen-client-urls http://0.0.0.0:4001 -initial-advertise-peer-urls hostIP:2380 -listen-peer-urls http://0.0.0.0:2380 -initial-cluster-token etcd-cluster-1 -initial-cluster etcd0=hostIP:2380 -initial-cluster-state new

master節(jié)點(diǎn):

docker run -d -p 8443:8443 -v /etc/kubernetes:/etc/kubernetes (CA證書(shū)目錄) -name apiserver xxx:xx /hyperkube apiserver --bind-address=0.0.0.0
--insecure-bind-address=127.0.0.1
--etcd-servers=hostIP:4001
--allow-privileged=true
--service-cluster-ip-range=10.10.10.0/24
--secure-port=8443
--insecure-port=8080
--advertise-address=hostIP
--tls-cert-file=/etc/kubernetes/cert/apiserver.pem
--tls-private-key-file=/etc/kubernetes/cert/apiserver-key.pem
--client-ca-file=/etc/kubernetes/cert/ca.pem
--admission-control=LimitRanger,NamespaceLifecycle,ServiceAccount,ResourceQuota
--v=2

docker run -d -v /etc/kubernetes:/etc/kubernetes -name controller-manager xxx:xx /hyperkube controller-manager --kubeconfig=/etc/kubernetes/controller-manager-kubeconfig
--service-account-private-key-file=/etc/kubernetes/cert/apiserver-key.pem
--root-ca-file=/etc/kubernetes/cert/ca.pem
--v=2

docker run -d  -v /etc/kubernetes:/etc/kubernetes -name scheduler xxx:xx /hyperkube scheduler 
--kubeconfig=/etc/kubernetes/scheduler-kubeconfig
--master=hostIP:443
--cluster-dns=10.10.10.10
--cluster-domain=cluster.local
--v=6

minion節(jié)點(diǎn):

docker run -d -v /etc/kubernetes:/etc/kubernetes -name kubelet xxx:xx /hyperkube kubelet 
--api-servers=hostIP:443
--allow-privileged=true 
--cluster-dns=10.10.10.10
--cluster-domain=cluster.local
--config=/etc/kubernetes/manifests
--kubeconfig=/etc/kubernetes/kubelet-kubeconfig
--v=2
--file-check-frequency=5s
--hostname-override=所在主機(jī)IP
--pod-infra-container-image=就是google的pause鏡像
--tls-cert-file=/etc/kubernetes/cert/kubelet.pem
--tls-private-key-file=/etc/kubernetes/cert/kubelet-key.pem
--logtostderr=false
--log_dir=/var/log/kubernetes

docker run -d -v /etc/kubernetes:/etc/kubernetes -name kube-proxy xxx:xx /hyperkube proxy --master=hostIP:443
--kubeconfig=/etc/kubernetes/kubelet-kubeconfig
--proxy-mode=userspace

這里還需要一個(gè)kube-dns插件,在早期的kubernetes版本中是提供了啟動(dòng)DNSyaml文件的(等找到后再貼出來(lái)吧),直接使用kubectl create -f xxx.yaml命令就可以啟動(dòng)。
關(guān)于kubelet-kubeconfig 、scheduler-kubeconfig 、controller-manager-kubeconfig 是service account, 其中kubelet-kubeconfig配置如下:

current-context: service-account-context
apiVersion: v1
kind: Config
contexts:
- context:
    cluster: local
    user: kubelet
    namespace: default
  name: service-account-context
clusters:
- name: local
  cluster:
    certificate-authority: /etc/kubernetes/cert/ca.pem
    apiVersion: v1
    server: hostIP:443
users:
- name: kubelet
  user:
    client-certificate: /etc/kubernetes/cert/kubelet.pem
    client-key: /etc/kubernetes/cert/kubelet-key.pem
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容