1. 程式人生 > >kubernetes構建微服務-k8s安裝篇

kubernetes構建微服務-k8s安裝篇

前言

關於Kubernetes的介紹網上非常非常的多,這裡就不多介紹了,如果有興趣瞭解,看官網點選開啟連結,值得靜下心來好好學習下。

系統環境及工具

工具用途
Oracle VirtualBox用於安裝ubuntu,單臺虛擬機器
Ubuntu版本是16.04 LTS

Kubernetes軟體包及ETCD

可以到官方的下載地址下載,地址是:點選開啟連結,最新下載版本是V1.10,會被牆,可以參考點選開啟連結,無論如何我還是把V1.0的client binary、server binary、node binary下載下來了。ETCD可以到點選開啟連結下載。

軟體包用途
kubernetes-server-linux-amd64.tar.gz

版本是V1.10,包含KUBE-APISERVER,KUBE-CONTROLLER-MANAGER,KUBE-SCHEDULE

下載地址: https://pan.baidu.com/s/13wm4-ekgWv2BWsCRnY38oQ 

kubernetes-node-linux-amd64.tar.gz

版本是V1.10,   包含KUBELET,KUBE-PROXY,KUBECTL,需要先安裝Docker

下載地址:https://pan.baidu.com/s/18PsRGxFIwqVbRIMRqZ8fgA

etcd-v3.3.4-linux-amd64.tar.gz

版本是V3.34,Kubernetes Master需要ETCD資料儲存

下載地址:https://pan.baidu.com/s/1jy7DN7z6TUWNWGjBoN92cw

Docker

版本V1.12.6

安裝配置ETCD

ETCD是用於共享配置和服務發現的分散式、一致性的KV儲存系統,主要包括了增刪改查、安全認證、叢集、選舉、事務、分散式鎖、Watch機制等等,實現了RAFT協議,功能相當強大,coreos出品。

解壓etcd-v3.3.4-linux-amd64.tar.gz,把目錄下的etcd和etcdctl複製到/usr/local/bin目下,如圖


然後在/usr/lib/systemd/system/目錄下建立etcd.service,如果沒有system這個目錄,則建立就可以,首先建立ETCD的儲存的目錄地址/home/chen/etcd/data,然後建立ETCD的配置檔案目錄/etc/etcd/,因為我們用的ETCD預設配置,所以/etc/etcd/etcd.conf空檔案即可。

/usr/lib/systemd/system/etcd.service

[Unit]
Descriptio=Etcd Server
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/chen/etcd/data
EnvironmentFile=- /etc/etcd/etcd.conf
ExecStart=/usr/local/bin/etcd

[Install]
WantedBy=multi-user.target

然後執行命令:

sudo systemctl daemon-reload
sudo systemctl enable etcd.service
sudo systemctl start etcd.service

啟動後檢視日誌:

sudo systemctl status etcd.service

這樣ETCD的服務就起來了,可以用etcdctl命令往etcd寫資料了。

export ETCDCTL_API=3
sudo ectdctl put foo "foo"
sudo ectdctl get foo


安裝配置k8s的MASTER

安裝配置API SERVER

API SERVER是整個k8s叢集的註冊中心、交通樞紐、安全控制入口。

解壓kubernetes-server-linux-amd64.tar.gz 檔案,拷貝kube-apiserver到/usr/local/bin/目錄下。


然後在/usr/lib/systemd/system/目錄下建立kube-apiserver.service


在/etc/kubernetes/目錄下建立apiserver配置檔案。


kube-apiserver.service配置

[Unit]
Description=Kube API  Server
After=etcd.service
Wants=etcd.service

[Service]
Type=notify
EnvironmentFile=/etc/kubernetes/apiserver
ExecStart=/usr/local/bin/kube-apiserver $KUBE_API_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target
/etc/kubernetes/apiserver
KUBE_API_ARGS="--etcd-servers=http://127.0.0.1:2379 --insecure-bind-address=0.0.0.0 --insecure-port=8080 --service-cluster-ip-range=170.170.0.0/16 --service-node-port-range=1-65535 --admission-control=NamespaceLifecycle,LimitRanger,ResourceQuota --logtostderr=false --log-dir=/home/chen/log/kubenetes --v=2"

API SERVER有三種認證方式:基本認證、Token認證、CA認證,很明顯,這個配置沒有任何認證資訊,不建議在生產環境中使用,但是為了快速搭建環境,此次先跳過這個步驟,另外寫部落格詳細描述這三種方式的搭建方式。

所有配置都弄好後,執行以下命令

sudo systemctl daemon-reload
sudo systemctl enable kube-apiserver.service
sudo systemctl start kube-apiserver.service

啟動後檢視日誌:

sudo systemctl status kube-apiserver.service

通過curl命令訪問API SERVER的資料,如下:

curl http://localhost:8080/api/

這樣API SERVER就搭建完成了。

安裝配置kube-controller-manager

Kube Controller Manager作為叢集內部的管理控制中心,負責叢集內的Node、Pod副本、服務端點(Endpoint)、名稱空間(Namespace)、服務賬號(ServiceAccount)、資源定額(ResourceQuota)的管理,當某個Node意外宕機時,Kube Controller Manager會及時發現並執行自動化修復流程,確保叢集始終處於預期的工作狀態。

kube-controller-manager的執行指令碼在kubernetes-server-linux-amd64.tar.gz 檔案中,拷貝kube-controller-manager到/usr/local/bin/目錄下。


然後在/usr/lib/systemd/system/目錄下建立kube-controller-manager.service


在/etc/kubernetes/目錄下建立controller-manager配置檔案。

kube-controller-manager.service 如下:

[Unit]
Description=Kube Controller Manager
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=/etc/kubernetes/controller-manager
ExecStart=/usr/local/bin/kube-controller-manager $KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

controller-manager配置檔案如下:

KUBE_CONTROLLER_MANAGER_ARGS="--master=http://10.0.2.15:8080 --logtostderr=false --log-dir=/home/chen/log/kubernetes --v=2"

--master=http://10.0.2.15:8080可以改成--master=http://127.0.0.1:8080,

然後執行如下命令:

sudo systemctl daemon-reload
sudo systemctl enable kube-controller-manager.service
sudo systemctl start kube-controller-manager.service

檢視啟動日誌:

sudo systemctl status kube-controller-manager.service

可以看到Kube Controller Manager已經啟動起來。

安裝配置kube-scheduler

Kube Scheduler是負責排程Pod到具體的Node,它通過API Server提供的介面監聽Pods,獲取待排程pod,然後根據一系列的預選策略和優選策略給各個Node節點打分排序,然後將Pod排程到得分最高的Node節點上。

kube-scheduler的執行指令碼在kubernetes-server-linux-amd64.tar.gz 檔案中,拷貝kube-scheduler到/usr/local/bin/目錄下。


然後在/usr/lib/systemd/system/目錄下建立kube-scheduler.service


在/etc/kubernetes/目錄下建立scheduler配置檔案。

kube-scheduler.service

[Unit]
Description=Kube Scheduler
After=kube-apiserver.service
Requires=kube-apiserver.service

[Service]
EnvironmentFile=/etc/kubernetes/scheduler
ExecStart=/usr/local/bin/kube-scheduler $KUBE_SCHEDULER_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

scheduler配置檔案

KUBE_SCHEDULER_ARGS="--master=http://10.0.2.15:8080 --logtostderr=false --log-dir=/home/chen/log/kubernetes --v=2"

執行以下命令:

sudo systemctl daemon-reload
sudo systemctl enable kube-scheduler.service
sudo systemctl start kube-scheduler.service

檢視啟動日誌:

sudo systemctl status kube-scheduler.service

OK,這樣kubernetes的Master節點就搭建完畢了,接下來搭建Node節點,Node節點還是在同樣的虛擬機器上搭建,一般要求是Master和Node在不同的伺服器上,但是K8s官方網站上說master和node在同一臺機器上完全是沒問題滴,所以就在同一臺伺服器上弄就可以了。

安裝配置NODE節點

安裝node之前需要先安裝docker,關於安裝docker的教程可以檢視官方文件,也可以檢視我之前寫的部落格,地址是點選開啟連結

安裝配置kubelet

在k8s叢集中,每個Node節點都會啟動kubelet程序,用來處理Master節點下發到本節點的任務,管理Pod和pod中的容器。kubelet會在API Server上註冊節點資訊,定期向Master彙報節點資源使用情況,並通過cAdvisor監控容器和節點資源。

解壓kubernetes-node-linux-amd64.tar.gz 檔案,拷貝kubelet到/usr/local/bin/目錄下。


然後在/usr/lib/systemd/system/目錄下建立kubelet.service


在/etc/kubernetes/目錄下建立配置檔案,包括kubelet和kubelet.yaml。


kubelet.service配置如下:

[Unit]
Description=Kube Kubelet Server
After=docker.service
Requires=docker.service

[Service]
ExecStart=/usr/local/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.yaml --fail-swap-on=false --runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

kubelet.yaml配置如下:

apiVersion: v1
kind: Config
clusters:
-  name: local
-  cluster:
      server: http://10.0.2.15:8080
users:
-  name: kubelet
contexts:
-  context: 
     cluster: local
     user: kubelet
-   name: kubelet-context
current-context: kubelet-context

配置完成後,執行以下命令:

sudo systemctl daemon-reload
sudo systemctl enable kubelet.service
sudo systemctl start kubelet.service

檢視啟動日誌:

sudo systemctl status kubelet.service

從日誌看,kubelet已經啟動起來,並拉取chenpeihai/springboot-helloworld的這個映象,以後的部落格會講這個。

安裝配置kube-proxy

kube-proxy是管理service的訪問入口,包括叢集內Pod到Service的訪問和叢集外訪問service。關於service和pod的概念可以自行網上檢視。

解壓kubernetes-node-linux-amd64.tar.gz 檔案,拷貝kube-proxy到/usr/local/bin/目錄下。


然後在/usr/lib/systemd/system/目錄下建立kube-proxy.service


在/etc/kubernetes/目錄下建立proxy配置檔案。

kube-proxy.service配置如下:

[Unit]
Descriptio=Kube Kube-Proxy Server
After=network.target
Requires=network.target

[Service]
EnvironmentFile=/etc/kubernetes/proxy
ExecStart=/usr/local/bin/kube-proxy $KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

proxy配置檔案如下:

KUBE_PROXY_ARGS="--master=http://10.0.2.15:8080 --logtostderr=false --log-dir=/home/chen/log/kubernetes --v=2"

配置完成後,執行以下命令:

sudo systemctl daemon-reload
sudo systemctl enable kube-proxy.service
sudo systemctl start kube-proxy.service

然後檢視日誌:

sudo systemctl status kube-proxy.service

可以看到kube-proxy已經啟動,下面的錯誤資訊並無大礙,檢視github上的issue有提到該問題,但是目前還是沒有去掉這個錯誤資訊。

最後把kubectl複製到/usr/local/bin目錄下。

單機的k8s就搭建完成了,下面會寫springboot部署到k8s的教程。