Web基礎配置篇(十六): Kubernetes集群的安裝使用
一、概述
Kubernetes 簡稱為K8S,是用于自動部署,擴展和管理容器化應用程序的開源系統(tǒng)。Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful),Kubernetes提供了應用部署,規(guī)劃,更新,維護的一種機制。
現(xiàn)在的云平臺,基本上都是基于k8s實現(xiàn)的。
Kubernetes需要用到docker,應該說是Kubernetes本身就是對docker容器的管理。
Docker 是一個開源的應用容器引擎,讓開發(fā)者可以打包他們的應用以及依賴包到一個可移植的鏡像中,然后發(fā)布到任何流行的 Linux或Windows 機器上,也可以實現(xiàn)虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。
如果你厭煩了vmware和vbox,就可以使用docker來做容器,特別方便。
首發(fā)地址:
??品茗IT: https://www.pomit.cn/p/2366402025269761
如果大家正在尋找一個java的學習環(huán)境,或者在開發(fā)中遇到困難,可以加入我們的java學習圈,點擊即可加入,共同學習,節(jié)約學習時間,減少很多在學習中遇到的難題。
二、準備工作
本文在三臺機器上分別安裝master,node1和node2.
- 需要centos7, cpu至少2核,硬盤至少10g;
- 使用vbox虛擬三個機器,一個master,兩個node;
- 關閉防火墻
# 臨時關閉
systemctl stop firewalld
# 永久關閉 ,然后reboot 重啟有效
systemctl disable firewalld
- k8s版本是1.6.2
- 修改/etc/hosts文件
10.247.62.213 k8s.master
10.247.62.221 k8s.node1
10.247.62.181 k8s.node2
我的三臺centos7都是新安裝的,dvd版本的。
過程中會寫出我遇到的一些坑,按照我的方法安裝,肯定能安裝成功,謹慎觀察其他博客的不負責任的搬運工們。
三、安裝Docker
需要在Kubernetes集群的所有節(jié)點上部署完畢Docker。
3.1 設置國內yum源
設置使用國內Yum源:
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
如果提示:
-bash: wget: 未找到命令
是因為沒有安裝wget.
yum install wget
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.2 Docker版本選擇
使用yum list docker-ce.x86_64 --showduplicates | sort -r
會列出一系列的docker版本,但是具體選哪個,還是要看下k8s需要哪個。
Unchanged
The list of validated docker versions remains unchanged.
The current list is 1.13.1, 17.03, 17.06, 17.09, 18.06, 18.09. (#72823, #72831)
這里標明了支持的docker版本。
3.3 Docker安裝
#安裝docker
yum -y install docker-ce-18.09.7-3.el7 docker-ce-cli-18.09.7
#設置開機啟動
systemctl enable docker && systemctl start docker
#查看版本
docker --version
3.4 cgroup驅動修改是否必要
這里告訴你,我安裝的版本沒強制要求修改!
很多博客都改了這玩意兒,設置cgroup驅動使用systemd,k8s是推薦使用systemd,可是對于需要看博客安裝的入門人員來說,多一個配置,就是多一個負擔。
所以,不建議修改。
可以查看docker的Cgroup
docker info | grep 'Cgroup Driver'
結果是:
Cgroup Driver: cgroupfs
可以查看k8s的Cgroup:
systemctl show --property=Environment kubelet | cat
結果是:
Environment=KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml
沒有指明!如果指明了你就要把它們修改為一致的。
如果非要修改Cgroup,下面是修改方法:
修改或創(chuàng)建/etc/docker/daemon.json,加入下面的內容:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
四、安裝kubadm和kubelet
在Kubernetes集群的所有節(jié)點上部署完畢Docker后,還需要全部部署kubeadm和kubelet,其中kubeadm是管理工具,kubelet是一個服務,用于啟動Kubernetes對應的服務。
4.1 設置kubernetes YUM倉庫
view /etc/yum.repos.d/kubernetes.repo
打開文件,寫入以下內容:
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
4.2 安裝1.16.2版本
yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 ipvsadm
4.3 配置kubelet
默認情況下,Kubelet不允許所在的主機存在交換分區(qū),后期規(guī)劃的時候,可以考慮在系統(tǒng)安裝的時候不創(chuàng)建交換分區(qū),針對已經存在交換分區(qū)的可以設置忽略禁止使用Swap的限制,不然無法啟動Kubelet。
[root@k8s ~]# view /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
如果想關閉SWAP,執(zhí)行命令(可以不關閉):
swapoff -a
4.4 設置內核參數(shù)
view /etc/sysctl.d/k8s.conf
新建文件。寫入下面內容:
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
使配置生效:sysctl --system
4.5 啟動kubelet并設置開機啟動
systemctl enable kubelet && systemctl start kubelet
以上步驟需要在Kubernetes的所有節(jié)點上執(zhí)行,本實驗環(huán)境是需要在master、node1、node2三臺機器上均安裝Docker、kubeadm、kubelet
五、集群Master部署
這一章節(jié)都是master上的安裝和配置。
5.1 初始化Master
使用以下命令初始化mater:
kubeadm init \
--kubernetes-version=v1.16.2 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=10.247.62.213 \
--ignore-preflight-errors=Swap
注意,這里的
- kubernetes-version是安裝的版本;
- pod-network-cidr是pod的網(wǎng)絡ip,不要和當前ip地址用同一個網(wǎng)段,不然會出錯,可以使用10.244.0.0/16這種。
- apiserver-advertise-address是master的ip地址。建議把第一個網(wǎng)卡設置成這個地址。
- ignore-preflight-errors=Swap,這個必須要,是忽略swap未關閉的錯誤,如果已經關閉就不需要了。
開始執(zhí)行:
[root@localhost ~]# kubeadm init \
> --kubernetes-version=v1.16.2 \
> --pod-network-cidr=10.244.0.0/16 \
> --apiserver-advertise-address=10.247.62.213 \
> --ignore-preflight-errors=Swap
[init] Using Kubernetes version: v1.16.2
[preflight] Running pre-flight checks
[WARNING Firewalld]: firewalld is active, please ensure ports [6443 10250] are open or your cluster may not function correctly
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
[WARNING Swap]: running with swap on is not supported. Please disable swap
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
等一會兒,提示拉取鏡像失敗。拉取的鏡像如下:
k8s.gcr.io/kube-apiserver:v1.16.2
k8s.gcr.io/kube-controller-manager:v1.16.2
k8s.gcr.io/kube-scheduler:v1.16.2
k8s.gcr.io/kube-proxy:v1.16.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.15-0
k8s.gcr.io/coredns:1.6.2
k8s.gcr.io的東西完全拉不下來。
5.2 拉取鏡像
因為上面k8s.gcr.io的東西完全拉不下來。需要換個地址拉取鏡像。
從docker的其他地址拉取鏡像:
docker pull mirrorgooglecontainers/kube-apiserver-amd64:v1.16.2
docker pull mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.2
docker pull mirrorgooglecontainers/kube-scheduler-amd64:v1.16.2
docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.16.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd-amd64:3.3.15-0
docker pull coredns/coredns:1.6.2
重命名:
docker tag mirrorgooglecontainers/kube-apiserver-amd64:v1.16.2 k8s.gcr.io/kube-apiserver:v1.16.2
docker tag mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.2 k8s.gcr.io/kube-controller-manager:v1.16.2
docker tag mirrorgooglecontainers/kube-scheduler-amd64:v1.16.2 k8s.gcr.io/kube-scheduler:v1.16.2
docker tag mirrorgooglecontainers/kube-proxy-amd64:v1.16.2 k8s.gcr.io/kube-proxy:v1.16.2
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag mirrorgooglecontainers/etcd-amd64:3.3.15-0 k8s.gcr.io/etcd:3.3.15-0
docker tag coredns/coredns:1.6.2 k8s.gcr.io/coredns:1.6.2
刪除舊鏡像:
docker rmi mirrorgooglecontainers/kube-apiserver-amd64:v1.16.2
docker rmi mirrorgooglecontainers/kube-controller-manager-amd64:v1.16.2
docker rmi mirrorgooglecontainers/kube-scheduler-amd64:v1.16.2
docker rmi mirrorgooglecontainers/kube-proxy-amd64:v1.16.2
docker rmi mirrorgooglecontainers/pause:3.1
docker rmi mirrorgooglecontainers/etcd-amd64:3.3.15-0
docker rmi coredns/coredns:1.6.2
5.3 拉取鏡像后重新執(zhí)行初始化
跟上面的命令一樣,執(zhí)行init命令:
kubeadm init \
--kubernetes-version=v1.16.2 \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=10.247.62.213 \
--ignore-preflight-errors=Swap
當看到下面的日志時,表示master已經初始化成功了。
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.247.62.213:6443 --token 90in5x.psdlm2z347221z2t \
--discovery-token-ca-cert-hash sha256:56db413a64dd1feb39dff8805acfee130000c452555e10940135025a292e9556
如果過程中有寫錯或出錯,可以使用kubeadm reset
重置。
5.4 Master配置
上面的日志中有三條命令要執(zhí)行下:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
不用做修改,直接執(zhí)行即可。
5.5 查看已安裝
# 查看節(jié)點
kubectl get nodes
# 查看pods,可以詳細列出master及node上面已經安裝的pod詳細情況
kubectl get pods --all-namespaces -o wide
# 查看kubelet日志
journalctl -f -u kubelet
5.6 安裝網(wǎng)絡插件
Master節(jié)點NotReady的原因就是因為沒有使用任何的網(wǎng)絡插件,此時Node和Master的連接還不正常。目前最流行的Kubernetes網(wǎng)絡插件有Flannel、Calico、Canal。
先嘗試安裝Canal:
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/canal.yaml
死活安裝不上,選擇安裝flannel:
先刪除之前安裝的canal,看著煩:
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
kubectl delete -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/canal.yaml
下載kube-flannel.yml:
從 https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
這個地址下載,但是這個地址可能下載不了,明明是github地址,可以到github上找到coreos/flannel項目的master分支下的Documentation/kube-flannel.yml文件,復制下來就行。
安裝flannel,這個使用的是本地文件了:
kubectl apply -f kube-flannel.yml
5.7 查看master當前pods
[root@k8s ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-5644d7b6d9-8lgrm 1/1 Running 0 8m22s 10.244.0.2 k8s.master <none> <none>
kube-system coredns-5644d7b6d9-jrlrt 1/1 Running 0 8m22s 10.244.0.3 k8s.master <none> <none>
kube-system etcd-k8s.master 1/1 Running 0 7m42s 10.247.62.213 k8s.master <none> <none>
kube-system kube-apiserver-k8s.master 1/1 Running 0 7m30s 10.247.62.213 k8s.master <none> <none>
kube-system kube-controller-manager-k8s.master 1/1 Running 0 7m35s 10.247.62.213 k8s.master <none> <none>
kube-system kube-flannel-ds-amd64-s25cn 1/1 Running 0 6m18s 10.247.62.213 k8s.master <none> <none>
kube-system kube-proxy-v4ktn 1/1 Running 0 8m22s 10.247.62.213 k8s.master <none> <none>
kube-system kube-scheduler-k8s.master 1/1 Running 0 7m33s 10.247.62.213 k8s.master <none> <none>
如果status是Pending、ContainerCreating、ImagePullBackOff 都表明 Pod 沒有就緒,Running 才是就緒狀態(tài)。
六、Node節(jié)點部署
如果上面沒有關閉防火墻,這里一定要關閉了,不然不行的咯。
systemctl stop firewalld
關閉防火墻。
需要在每個node節(jié)點上執(zhí)行下面的操作。
6.1 加入Master
在master初始化的時候,日志的最后一句是:
--discovery-token-ca-cert-hash sha256:56db413a64dd1feb39dff8805acfee130000c452555e10940135025a292e9556 ```
我這里這樣執(zhí)行:
kubeadm join 10.247.62.213:6443 --token 90in5x.psdlm2z347221z2t
--discovery-token-ca-cert-hash sha256:56db413a64dd1feb39dff8805acfee130000c452555e10940135025a292e9556
--ignore-preflight-errors=Swap
**注意,這里的:**
- **token和discovery-token-ca-cert-hash 都是Master初始化顯示的那個,應該說可以直接把那一句拷過來。**
- **ignore-preflight-errors=Swap,關閉swap分區(qū)錯誤提示。**
#### 6.2 查看節(jié)點及pods狀態(tài)
[root@k8s ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-5644d7b6d9-8lgrm 1/1 Running 0 8m22s 10.244.0.2 k8s.master <none> <none>
kube-system coredns-5644d7b6d9-jrlrt 1/1 Running 0 8m22s 10.244.0.3 k8s.master <none> <none>
kube-system etcd-k8s.master 1/1 Running 0 7m42s 10.247.62.213 k8s.master <none> <none>
kube-system kube-apiserver-k8s.master 1/1 Running 0 7m30s 10.247.62.213 k8s.master <none> <none>
kube-system kube-controller-manager-k8s.master 1/1 Running 0 7m35s 10.247.62.213 k8s.master <none> <none>
kube-system kube-flannel-ds-amd64-82x9f 0/1 Init:0/1 0 6m18s 10.247.62.181 k8s.node2 <none> <none>
kube-system kube-flannel-ds-amd64-c8rtk 0/1 Init:0/1 0 6m18s 10.247.62.221 k8s.node1 <none> <none>
kube-system kube-flannel-ds-amd64-s25cn 1/1 Running 0 6m18s 10.247.62.213 k8s.master <none> <none>
kube-system kube-proxy-phtm7 0/1 ContainerCreating 0 6m42s 10.247.62.221 k8s.node1 <none> <none>
kube-system kube-proxy-px8hs 0/1 ContainerCreating 0 6m23s 10.247.62.181 k8s.node2 <none> <none>
kube-system kube-proxy-v4ktn 1/1 Running 0 8m22s 10.247.62.213 k8s.master <none> <none>
kube-system kube-scheduler-k8s.master 1/1 Running 0 7m33s 10.247.62.213 k8s.master <none> <none>
[root@k8s ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s.master Ready master 3m11s v1.16.2
k8s.node1 NotReady <none> 73s v1.16.2
k8s.node2 NotReady <none> 54s v1.16.2
**這時候,我們會發(fā)現(xiàn),k8s.node1和k8s.node2的節(jié)點狀態(tài)都是NotReady,而且pods的狀態(tài)不是Running就緒狀態(tài)。說明沒加入成功**
最后發(fā)現(xiàn)是node上拉不下來鏡像,下面講下排錯歷程。
#### 6.3 排錯歷程
##### **6.3.1 嘗試重新加入(無效)**
這時候,你可能想到重新加入一次:
master上執(zhí)行刪除節(jié)點命令
kubectl delete node k8s.node1
node上執(zhí)行reset命令
kubeadm reset
**重新加入無效。**
##### **6.3.2 查看node日志并搜索解決方案(無效)**
使用命令```kubectl describe node k8s.node1```,查看節(jié)點錯誤日志:
DiskPressure False Tue, 29 Oct 2019 14:06:24 +0800 Tue, 29 Oct 2019 12:41:14 +0800 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Tue, 29 Oct 2019 14:06:24 +0800 Tue, 29 Oct 2019 12:41:14 +0800 KubeletHasSufficientPID kubelet has sufficient PID available
Ready False Tue, 29 Oct 2019 14:06:24 +0800 Tue, 29 Oct 2019 12:41:14 +0800 KubeletNotReady runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized
錯誤是```runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized:```
網(wǎng)上的解決方法(無效):
```vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf```,
刪除最后一行里的$KUBELET_NETWORK_ARGS。
**1.6.2版本中,這個文件是不存在的。** 這個文件在/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf中。
**然而network-plugin并不在里面,在/var/lib/kubelet/kubeadm-flags.env文件中。**
添加:
KUBELET_KUBEADM_ARGS="--cgroup-driver=cgroupfs --network-plugin=cni --pod-infra-container-image=k8s.gcr.io/pause:3.1"
重新啟動:```systemctl enable kubelet && systemctl start kubelet```
matser重新初始化,node重新加入,都需要kubeadm reset。
**方法無效!**
還有說法是在kubectl apply -f kube-flannel.yml之前加入node節(jié)點,**無效**,還是報錯:cni.go:237] Unable to update cni config: no networks found in /etc/cni/net.d。
##### **6.3.2 查看pod日志(解決)**
搜索錯誤過程中發(fā)現(xiàn)可以使用下面方法查找錯誤日志:
kubectl --namespace kube-system logs kube-flannel-ds-amd64-82x9f
kubectl describe pod kube-flannel-ds-amd64-82x9f --namespace=kube-system
錯誤提示:
Warning FailedCreatePodSandBox 18s (x8 over 5m58s) kubelet, k8s.node2 Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image "k8s.gcr.io/pause:3.1": Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
原來是鏡像拉不下來,浪費這么長時間,垃圾博客害死人。
到node節(jié)點上,拉鏡像:
docker pull mirrorgooglecontainers/pause:3.1
docker tag mirrorgooglecontainers/pause:3.1 k8s.gcr.io/pause:3.1
docker rmi mirrorgooglecontainers/pause:3.1
終于成功了!
查看pods日志:
Events:
Type Reason Age From Message
Normal Scheduled <unknown> default-scheduler Successfully assigned kube-system/kube-flannel-ds-amd64-82x9f to k8s.node2
Warning FailedCreatePodSandBox 89s (x8 over 7m9s) kubelet, k8s.node2 Failed create pod sandbox: rpc error: code = Unknown desc = failed pulling image "k8s.gcr.io/pause:3.1": Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Normal Pulling 76s kubelet, k8s.node2 Pulling image "quay.io/coreos/flannel:v0.11.0-amd64"
Normal Pulled 29s kubelet, k8s.node2 Successfully pulled image "quay.io/coreos/flannel:v0.11.0-amd64"
Normal Created 28s kubelet, k8s.node2 Created container install-cni
Normal Started 27s kubelet, k8s.node2 Started container install-cni
Normal Pulled 27s kubelet, k8s.node2 Container image "quay.io/coreos/flannel:v0.11.0-amd64" already present on machine
Normal Created 27s kubelet, k8s.node2 Created container kube-flannel
Normal Started 26s kubelet, k8s.node2 Started container kube-flannel
[root@k8s ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s.master Ready master 10m v1.16.2
k8s.node1 Ready <none> 8m33s v1.16.2
k8s.node2 Ready <none> 8m14s v1.16.2
都是Ready狀態(tài),可以歡呼了。
且慢!還有問題!使用```kubectl get pods --all-namespaces -o wide```命令查看pods,發(fā)現(xiàn)節(jié)點的kube-proxy和kube-flannel-ds-amd64總是在CrashLoopBackOff和ImagePullBackOff之間變換。
查看pod的描述
kubectl describe pod kube-flannel-ds-amd64-82x9f --namespace=kube-system
kubectl describe pod kube-proxy-phtm7 --namespace=kube-system
發(fā)現(xiàn):
Failed to pull image "k8s.gcr.io/kube-proxy:v1.16.2": rpc error: code = Unknown
**又要拉鏡像了,類同上面:**
docker pull mirrorgooglecontainers/kube-proxy-amd64:v1.16.2
docker tag mirrorgooglecontainers/kube-proxy-amd64:v1.16.2 k8s.gcr.io/kube-proxy:v1.16.2
docker rmi mirrorgooglecontainers/kube-proxy-amd64:v1.16.2
每個node節(jié)點都執(zhí)行一遍,然后使用```kubectl get pods --all-namespaces -o wide```命令查看pods:
[root@k8s ~]# kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system coredns-5644d7b6d9-8lgrm 1/1 Running 0 59m 10.244.0.2 k8s.master <none> <none>
kube-system coredns-5644d7b6d9-jrlrt 1/1 Running 0 59m 10.244.0.3 k8s.master <none> <none>
kube-system etcd-k8s.master 1/1 Running 0 58m 10.247.62.213 k8s.master <none> <none>
kube-system kube-apiserver-k8s.master 1/1 Running 0 58m 10.247.62.213 k8s.master <none> <none>
kube-system kube-controller-manager-k8s.master 1/1 Running 0 58m 10.247.62.213 k8s.master <none> <none>
kube-system kube-flannel-ds-amd64-82x9f 1/1 Running 13 57m 10.247.62.181 k8s.node2 <none> <none>
kube-system kube-flannel-ds-amd64-c8rtk 1/1 Running 13 57m 10.247.62.221 k8s.node1 <none> <none>
kube-system kube-flannel-ds-amd64-s25cn 1/1 Running 0 57m 10.247.62.213 k8s.master <none> <none>
kube-system kube-proxy-phtm7 1/1 Running 0 57m 10.247.62.221 k8s.node1 <none> <none>
kube-system kube-proxy-px8hs 1/1 Running 0 57m 10.247.62.181 k8s.node2 <none> <none>
kube-system kube-proxy-v4ktn 1/1 Running 0 59m 10.247.62.213 k8s.master <none> <none>
kube-system kube-scheduler-k8s.master 1/1 Running 0 58m 10.247.62.213 k8s.master <none> <none>
又可以歡呼了!
安裝完Kubernetes集群了,下一篇講下如何安裝k8s的dashboard界面。
[品茗IT-博客專題:https://www.pomit.cn/lecture.html](https://www.pomit.cn/lecture.html)匯總了[Spring專題](https://www.pomit.cn/lecture/springunion.html)、[Springboot專題](https://www.pomit.cn/lecture/springbootfull.html)、[SpringCloud專題](https://www.pomit.cn/lecture/springcloudfull.html)、[web基礎配置](https://www.pomit.cn/lecture/webbasics.html)專題。
### 快速構建項目
Spring項目快速開發(fā)工具:
[一鍵快速構建Spring項目工具](https://www.pomit.cn/java/spring/spring.html)
[一鍵快速構建SpringBoot項目工具](https://www.pomit.cn/java/spring/springboot.html)
[一鍵快速構建SpringCloud項目工具](https://www.pomit.cn/java/spring/springcloud.html)
[一站式Springboot項目生成](https://www.pomit.cn/java/java/sqlToSpringboot.html)
[Mysql一鍵生成Mybatis注解Mapper](https://www.pomit.cn/java/java/sqlToMybatis.html)
[Spring組件化構建](https://www.pomit.cn/java/spring/spring.html)
[SpringBoot組件化構建](https://www.pomit.cn/java/spring/springboot.html)
[SpringCloud服務化構建](https://www.pomit.cn/java/spring/springcloud.html)
喜歡這篇文章么,喜歡就加入我們一起討論Java Web吧!
