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/apiserverKUBE_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的教程。