這次繼續集羣的部署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:每次安裝都需要看日誌的,老鐵不要認爲看日誌麻煩,看日誌其實是爲了避免後續的問題存在,走一步穩一步!後續在出現問題了,就更麻煩。下次老鐵我們一起在這個集羣上面做下測試和練習。