這次繼續叢集的部署simple版本(下)。源碼:https://github.com/limingios/msA-docker k8s分支和https://github.com/limingios/kubernetes-starter
部署Scheduler(主節點)
簡介
kube-scheduler負責配置設定排程Pod到叢集内的節點上,它監聽kube-apiserver,查詢還未配置設定Node的Pod,然後根據排程政策為這些Pod配置設定節點。我們前面講到的kubernetes的各種排程政策就是它實作的。
部署
通過系統服務方式部署
cp ~/kubernetes-starter/target/master-node/kube-scheduler.service /lib/systemd/system/
systemctl enable kube-scheduler.service
service kube-scheduler start
journalctl -f -u kube-scheduler
複制
重點配置說明
vi /lib/systemd/system/kube-scheduler.service
複制
[Unit]
Description=Kubernetes Scheduler
...
[Service]
ExecStart=/home/michael/bin/kube-scheduler \
#對外服務的監聽位址,這裡表示隻有本機的程式可以通路它
--address=127.0.0.1 \
#apiserver的url
--master=http://127.0.0.1:8080 \
...
PS:最重要的三個核心元件就部署完了 ,
部署CalicoNode(所有節點)
它是通過系統服務加docker的方式來完成的。
簡介
Calico實作了CNI接口,是kubernetes網絡方案的一種選擇,它一個純三層的資料中心網絡方案(不需要Overlay),并且與OpenStack、Kubernetes、AWS、GCE等IaaS和容器平台都有良好的內建。 Calico在每一個計算節點利用Linux Kernel實作了一個高效的vRouter來負責資料轉發,而每個vRouter通過BGP協定負責把自己上運作的workload的路由資訊像整個Calico網絡内傳播——小規模部署可以直接互聯,大規模下可通過指定的BGP route reflector來完成。 這樣保證最終所有的workload之間的資料流量都是通過IP路由的方式完成互聯的。
部署
calico是通過系統服務+docker方式完成的
cp ~/kubernetes-starter/target/all-node/kube-calico.service /lib/systemd/system/
systemctl enable kube-calico.service
service kube-calico start
journalctl -f -u kube-calico
複制
檢視配置
vi /lib/systemd/system/kube-calico.service
複制
calico可用性驗證
檢視容器運作情況
docker ps
複制
檢視節點運作情況
calicoctl node status
複制
檢視端口BGP 協定是通過TCP 連接配接來建立鄰居的,是以可以用netstat 指令驗證 BGP Peer
netstat -natp|grep ESTABLISHED|grep 179
複制
檢視叢集ippool情況[主節點]
calicoctl get ipPool -o yaml
複制
5.4 重點配置說明
[Unit]
Description=calico node
...
[Service]
#以docker方式運作
ExecStart=/usr/bin/docker run --net=host --privileged --name=calico-node \
#指定etcd endpoints(這裡主要負責網絡中繼資料一緻性,確定Calico網絡狀态的準确性)
-e ETCDENDPOINTS=http://192.168.66.101:2379 \
#網絡位址範圍(同上面ControllerManager)
-e CALICOIPV4POOL_CIDR=172.20.0.0/16 \
#鏡像名,為了加快大家的下載下傳速度,鏡像都放到了阿裡雲上
registry.cn-hangzhou.aliyuncs.com/imooc/calico-node:v2.6.2
配置kubectl指令(主節點)
簡介
kubectl是Kubernetes的指令行工具,是Kubernetes使用者和管理者必備的管理工具。 kubectl提供了大量的子指令,友善管理Kubernetes叢集中的各種功能。
初始化
使用kubectl的第一步是配置Kubernetes叢集以及認證方式,包括:
- cluster資訊:api-server位址
- 使用者資訊:使用者名、密碼或密鑰
- Context:cluster、使用者資訊以及Namespace的組合
我們這沒有安全相關的東西,隻需要設定好api-server和上下文就好啦:
#指定apiserver位址(ip替換為你自己的api-server位址)
kubectl config set-cluster kubernetes --server=http://192.168.66.101:8080
#指定設定上下文,指定cluster
kubectl config set-context kubernetes --cluster=kubernetes
#選擇預設的上下文
kubectl config use-context kubernetes
複制
通過上面的設定最終目的是生成了一個配置檔案:~/.kube/config,當然你也可以手寫或複制一個檔案放在那,就不需要上面的指令了。
配置kubelet(工作節點102,103這2兩台機器)
簡介
每個工作節點上都運作一個kubelet服務程序,預設監聽10250端口,接收并執行master發來的指令,管理Pod及Pod中的容器。每個kubelet程序會在API Server上注冊節點自身資訊,定期向master節點彙報節點的資源使用情況,并通過cAdvisor監控節點和容器的資源。
部署
通過系統服務方式部署,但步驟會多一些,具體如下:
#確定相關目錄存在
mkdir -p /var/lib/kubelet
mkdir -p /etc/kubernetes
mkdir -p /etc/cni/net.d
#複制kubelet服務配置檔案
cp ~/kubernetes-starter/target/worker-node/kubelet.service /lib/systemd/system/
#複制kubelet依賴的配置檔案
cp ~/kubernetes-starter/target/worker-node/kubelet.kubeconfig /etc/kubernetes/
#複制kubelet用到的cni插件配置檔案
cp ~/kubernetes-starter/target/worker-node/10-calico.conf /etc/cni/net.d/
systemctl enable kubelet.service
service kubelet start
journalctl -f -u kubelet
複制
主節點檢視node的資訊
kubectl get nodes
複制
重點配置說明
kubelet.service
[Unit]
Description=Kubernetes Kubelet
[Service]
#kubelet工作目錄,存儲目前節點容器,pod等資訊
WorkingDirectory=/var/lib/kubelet
ExecStart=/home/michael/bin/kubelet \
#對外服務的監聽位址
--address=192.168.66.103 \
#指定基礎容器的鏡像,負責建立Pod 内部共享的網絡、檔案系統等,這個基礎容器非常重要:K8S每一個運作的 POD裡面必然包含這個基礎容器,如果它沒有運作起來那麼你的POD 肯定建立不了
--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/imooc/pause-amd64:3.0 \
#通路叢集方式的配置,如api-server位址等
--kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
#聲明cni網絡插件
--network-plugin=cni \
#cni網絡配置目錄,kubelet會讀取該目錄下得網絡配置
--cni-conf-dir=/etc/cni/net.d \
#指定 kubedns 的 Service IP(可以先配置設定,後續建立 kubedns 服務時指定該 IP),--cluster-domain 指定域名字尾,這兩個參數同時指定後才會生效
--cluster-dns=10.68.0.2 \
...
kubelet.kubeconfig
kubelet依賴的一個配置,格式看也是我們後面經常遇到的yaml格式,描述了kubelet通路apiserver的方式
apiVersion: v1
clusters:
- cluster:
#跳過tls,即是kubernetes的認證
insecure-skip-tls-verify: true
#api-server位址
server: http://192.168.1.102:8080
...
10-calico.conf
calico作為kubernets的CNI插件的配置
{
"name": "calico-k8s-network",
"cniVersion": "0.1.0",
"type": "calico",
<!--etcd的url-->
"ed_endpoints": "http://192.168.1.102:2379",
"logevel": "info",
"ipam": {
"type": "calico-ipam"
},
"kubernetes": {
<!--api-server的url-->
"k8s_api_root": "http://192.168.1.102:8080"
}
}
複制
PS:每次安裝都需要看日志的,老鐵不要認為看日志麻煩,看日志其實是為了避免後續的問題存在,走一步穩一步!後續在出現問題了,就更麻煩。下次老鐵我們一起在這個叢集上面做下測試和練習。