6 30
Kubernetes集群搭建

本文主要纪录Ubuntu环境下搭建Kubernetes集群的相关步骤,包括网络环境、docker配置、k8s安装。这里把安装过程中遇到的问题以及解决方法也纪录下来,然后分享出来

本文操作环境的默认用户为 root

一、环境准备

为了快速搭建,我选用了三台ubuntu的虚拟机,初步规划如下:

操作系统 服务器IP 节点名称 角色
Ubuntu 18.04 192.168.159.101 kmaster master节点
Ubuntu 18.04 192.168.159.102 knode-1 worker节点
Ubuntu 18.04 192.168.159.103 knode-2 worker节点
Ubuntu 18.04 192.168.159.104 knode-3 worker节点

1.1 安装 SS

由于安装kubernetes在国内的网络环境下,如果没有条件,可能需要采用一些科学上网的工具进行一些网络环境设置,下面我简单列一下:

在我的 4台 Ubuntu 下各执行下面的命令:

sudo apt install python3-pip
pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip

1.2 创建 Shadowsocks 配置文件

创建一个 /etc/shadowsocks.json 文件,格式如下

需要事先设置 socks5 服务,相关方法自行google

下面是我的demo配置信息,供参考

{
    "server": "我的socks服务地址",
    "server_port": 我的socks服务端口,
    "local_address": "127.0.0.1",
    "local_port": 1080,
    "password": "我的密码",
    "timeout": 300,
    "method": "RC4-MD5",
    "fast_open": false
}

1.3 启动 Shadowsocks

Python 版客户端命令是 sslocal , Shadowsocks-libev 客户端命令为 ss-local

/usr/local/bin/sslocal -c /etc/shadowsocks.json -d start

1.4 终端内使用,需安裝 proxychains 或 privoxy

为了在终端中使用代理,还需要安装配置 privoxy (也可以选择 proxychains)

apt-get install privoxy -y

安装完成后编辑 /etc/privoxy/config,搜索关键字 forward-socks5t,取消下面这一行的注释:

forward-socks5t   /               127.0.0.1:1080 .

这里 1080 对应着上面 Shadowsocks 配置文件中的“端口号”。

启动 privoxy

systemctl start privoxy

1.5 设置环境变量

4台服务器,分别编辑 ~/.profile,并在文件末尾添加如下内容:

export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118
export ftp_proxy=http://127.0.0.1:8118
export no_proxy=localhost,127.0.0.0,127.0.1.1,127.0.1.1,192.168.159.101,192.168.159.102,192.168.159.103,192.168.159.104,10.0.0.0/8,192.168.0.0/16,mirrors.aliyun.com

export HTTP_PROXY=http://127.0.0.1:8118
export HTTPS_PROXY=http://127.0.0.1:8118
export FTP_PROXY=http://127.0.0.1:8118
export NO_PROXY=localhost,127.0.0.0,127.0.1.1,127.0.1.1,10.0.0.0/8,192.168.159.101,192.168.159.102,192.168.159.103,192.168.159.10,192.168.0.0/16,mirrors.aliyun.com

1.6 关闭swap

编辑/etc/fstab文件,注释掉引用swap的行,保存并重启后输入sudo swapoff -a即可

1.7 开机后台自动运行ss

由于我们想服务器重启后我们的ss服务能自动拉起,所以我们需要借助第三方软件进行后台进程管理,这里我选用了supervisor

sudo apt-get install supervisor

安装好后我们可以在/etc/supervisor/目录下找到supervisor.conf配置文件,我们可以用以下命令来编辑

sudo vim /etc/supervisor/conf.d/shadowsocks.conf

在这个文件的最后加上以下内容

[program:shadowsocks]
command=sslocal -c /etc/shadowsocks.json
autostart=true
autorestart=true
user=root
log_stderr=true
logfile=/var/log/shadowsocks.log

重启suervisor

sudo service supervisor restart

1.8 关闭 ubuntu 防火墙

sudo ufw disable

二、Docker 安装

网络环境配置完后,我们把重心放回kubernetes的核心部件安装,容器运行时是执行容器并在节点上管理容器镜像的软件,目前,最广为人知的容器运行时是Docker,但在生态系统中还有其他容器运行时软件,比如Rkt、Containerd和Lxd。Docker是现在于Kubernetes环境中使用的最常见的容器运行时,所以我这里就默认选用Docker

2.1 安装必要的一些系统工具

sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

2.2 安装GPG证书

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

2.3 写入软件源信息

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

2.4 更新并指定版本安装Docker-CE

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

2.5 设置阿里源

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
 {
   "registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
 }
 EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

三、使用minikube安装kubernetes集群

安装kubernetes集群,目前主流的有三种方式:minikube、kubeadm、二进制文件安装;

由于二进制安装略有冗长,所以这里我主要介绍前面两种。

3.1 安装Minikube

MiniKube 是使用 Go 语言开发的,所以安装其实很方便,一是通过下载基于不同平台早已编译好的二级制文件安装,二是可以编译源文件安装。

Mac安装

brew cask install minikube

minikube -h

Linux 安装

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/

minikube -h

3.2 安装Kubectl

kubernetes通过kube-apiserver作为整个集群管理的入口。Apiserver是整个集群的主管理节点,用户通过Apiserver配置和组织集群,同时集群中各个节点同etcd存储的交互也是通过Apiserver进行交互。Apiserver实现了一套RESTfull的接口,用户可以直接使用API同Apiserver交互。但是官方提供了一个客户端kubectl随工具集打包,用于可直接通过kubectl以命令行的方式同集群交互。

curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/

kubectl -h

3.3 启动minikube

由于minikube默认情况下运行需要虚拟机驱动,所以建议我们事先安装好virtualBox软件先,然后可以执行启动:

sudo minikube start

3.4 启动容器服务

sudo kubectl run kube-nginx --image=nginx:latest --port=80

deployment "kube-nginx" created

3.5 发布服务

sudo kubectl expose deployment kube-nginx --type=NodePort
service "kube-nginx" exposed

3.6 服务地址

sudo minikube service kube-nginx --url

http://127.0.0.1:31511

这里展示的地址即启动的nginx容器服务地址,访问http://127.0.0.1:31511 于是便出现nginx首页,服务成功启动.

3.7 启动dashboard管理后台

dashboard是kubernetes提供的容器服务管理后台,可视化界面,用来进行机器负载,集群管理,镜像扩容,配置数据等相关操作

启动dashboard

sudo minikube dashboard --url

四 使用 Kubeadm 安装 Kubernetes

4.1 配置 Docker 的 proxy

我们可以对docker的registry设置阿里云镜像源 (参考 2.5 ) 行代理设置,除了这个方法,我们也可以采用下面的方式:

Kubernetes 的一些 docker 镜像是需要借助梯子才能拉取到的,为此需要为 Docker 配置 Proxy。

参考 https://docs.docker.com/config/daemon/systemd/#httphttps-proxy

配置文件 /etc/systemd/system/docker.service.d/http-proxy.conf 内容如下:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:8118/"
Environment="NO_PROXY=localhost,127.0.0.0/8,10.0.0.0/8,192.168.0.0/16,xxxxxxx.mirror.aliyuncs.com"

重启 docker

sudo systemctl daemon-reload
sudo systemctl restart docker

4.2 安装Kubernetes(所有虚拟机)

如果你已经使用Minikube安装了k8s,那么kubectl命令会有一份配置文件存在 $HOME/.kube目录下,需要删除才可以使用kubeadm安装

添加软件源

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

更新软件包缓存并安装

apt-get update
apt-get install -y kubelet kubeadm kubectl kubernetes-cni
apt-mark hold kubelet kubeadm kubectl

启用kubelet

systemctl enable kubelet && systemctl start kubelet

(可选) 添加到变量到 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Environment="cgroup-driver=systemd/cgroup-driver=cgroups" 

4.3 使用kubeadm init初始化master节点

kubeadm init 前最好删除 $HOME/.kube目录

下面提供两种网络插件安装方式,选其中一种即可

calico 网络

kubeadm init --apiserver-advertise-address 192.168.159.101 --pod-network-cidr=192.168.0.0/16

Flannel网络

kubeadm init --apiserver-advertise-address 192.168.159.101 --pod-network-cidr=10.244.0.0/16

配置文件方式(可选)

执行 kubeadm config print init-defaults 可以取得默认的初始化参数文件

kubeadm config print init-defaults > init.default.yml

对生成的文件进行编辑,可以按需生成合适的配置,例如,若需要定制镜像仓库地址、以及Pod的地址范围,则可以使用如下配置

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
imageRepository: docker.io/dustine
kubernetesVersion: v1.14.0
networking:
    podSubnet:"192.168.0.0/16"

将上面的内容保存为init-config.yaml 备用

4.4 init 常用主要参数:

  • kubernetes-version: 指定Kubenetes版本,如果不指定该参数,会从google网站下载最新的版本信息。

  • pod-network-cidr: 指定pod网络的IP地址范围,它的值取决于你在下一步选择的哪个网络网络插件,比如我在本文中使用的是 flannel 网络,需要指定为10.244.0.0/16。

  • apiserver-advertise-address: 指定master服务发布的Ip地址,如果不指定,则会自动检测网络接口,通常是内网IP。 kubeadm init 输出的token用于master和加入节点间的身份认证,token是机密的,需要保证它的安全,因为拥有此标记的人都可以随意向集群中添加节点。

安装过程中,可能会出现下面的错误

[init] Using Kubernetes version: v1.15.0
[preflight] Running pre-flight checks
    [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/
[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'
error execution phase preflight: [preflight] Some fatal errors occurred:
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-apiserver:v1.15.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager:v1.15.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-scheduler:v1.15.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-proxy:v1.15.0: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/pause:3.1: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/etcd:3.3.10: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
    [ERROR ImagePull]: failed to pull image k8s.gcr.io/coredns:1.3.1: output: Error response from daemon: Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`

新版本的Kubernetes在安装部署中,需要从k8s.grc.io仓库中拉取所需镜像文件,但由于国内网络防火墙问题导致无法正常拉取

docker.io仓库对google的容器做了镜像,可以通过下列命令下拉取相关镜像:

建议 master 和 node 节点也安装下面的镜像

否则node节点可能由于墙的原因,在加入集群的时候可能会报下面的错误

Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

因为每个node节点,需要 k8s.gcr.io/pausekube-proxycalico/fannel等插件 等相关启动容器的支持才能正常工作

下面是镜像安装脚本

vim imagespull.sh

docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1

docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.15.0 k8s.gcr.io/kube-proxy:v1.15.0
docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.15.0 k8s.gcr.io/kube-scheduler:v1.15.0
docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.15.0 k8s.gcr.io/kube-apiserver:v1.15.0
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.15.0 k8s.gcr.io/kube-controller-manager:v1.15.0
docker tag docker.io/mirrorgooglecontainers/etcd:3.3.10  k8s.gcr.io/etcd:3.3.10
docker tag docker.io/mirrorgooglecontainers/pause:3.1  k8s.gcr.io/pause:3.1
docker tag docker.io/coredns/coredns:1.3.1  k8s.gcr.io/coredns:1.3.1
sh imagespull.sh

最后,kubeadm init 执行后,如出现下面的信息,表示安装成功

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 192.168.159.101:6443 --token 82e1nv.rtjfhtg2yufmvxfe \
    --discovery-token-ca-cert-hash sha256:5caf354a1ec5dc2ba220b38f71b2a8b11d767be1ffcd12cc0c04336986599d8c

按照提示执行下面的命令,复制配置文件到普通用户的home目录下

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.5 安装网络插件

安装一个网络插件是必须的,因为你的pods之间需要彼此通信。

网络部署必须是优先于任何应用的部署,详细的网络列表可参考插件页面。

上面在 kubeadm init 的时候根据选择的网络模型方式,选择下面其中对应的安装

下面的插件二选一进行安装:

Calico

如果使用的是 calico 网络,安装如下:

kubectl apply -f https://docs.projectcalico.org/v3.7/manifests/calico.yaml

Flannel

如果使用的是 flannel 网络,安装如下:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

观察是否配置成功

kubectl get pods -o wide --all-namespaces

NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE   IP                NODE      NOMINATED NODE   READINESS GATES
kube-system   calico-kube-controllers-6fb584dd97-dpll4   1/1     Running   0          43s   192.168.189.3     kmaster   <none>           <none>
kube-system   calico-node-t4xxf                          1/1     Running   0          43s   192.168.159.101   kmaster   <none>           <none>
kube-system   coredns-5c98db65d4-fcdx9                   1/1     Running   0          86s   192.168.189.2     kmaster   <none>           <none>
kube-system   coredns-5c98db65d4-pcsmk                   1/1     Running   0          86s   192.168.189.1     kmaster   <none>           <none>
kube-system   etcd-kmaster                               1/1     Running   0          18s   192.168.159.101   kmaster   <none>           <none>
kube-system   kube-apiserver-kmaster                     1/1     Running   0          25s   192.168.159.101   kmaster   <none>           <none>
kube-system   kube-controller-manager-kmaster            1/1     Running   0          38s   192.168.159.101   kmaster   <none>           <none>
kube-system   kube-proxy-dd4kk                           1/1     Running   0          85s   192.168.159.101   kmaster   <none>           <none>
kube-system   kube-scheduler-kmaster                     1/1     Running   0          28s   192.168.159.101   kmaster   <none>           <none>
kubectl get nodes
NAME      STATUS   ROLES    AGE     VERSION
kmaster   Ready    master   2m11s   v1.15.0

4.6 添加从节点

在从节点上按照前面的步骤按照好docker和kubeadm后,就可以添加从节点到主节点上了

kubeadm join 192.168.159.101:6443 --token 82e1nv.rtjfhtg2yufmvxfe --discovery-token-ca-cert-hash sha256:5caf354a1ec5dc2ba220b38f71b2a8b11d767be1ffcd12cc0c04336986599d8c

回到master节点查看集群状态

kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
kmaster   Ready    master   35m   v1.15.0
knode-1   Ready    <none>   69s   v1.15.0

这样一个节点添加成功,我们同时把其它节点添加进来就可以了

我们可以手动给任意 node 设置 ROLES

原理就是给 node 打标签, 只不过是特殊的标签

kubectl label node knode-1 node-role.kubernetes.io/worker=worker
kubectl label node knode-2 node-role.kubernetes.io/worker=worker
kubectl label node knode-3 node-role.kubernetes.io/worker=worker
kubectl get nodes
NAME      STATUS   ROLES    AGE     VERSION
kmaster   Ready    master   34m     v1.15.0
knode-1   Ready    worker   29m     v1.15.0
knode-2   Ready    worker   28m     v1.15.0
knode-3   Ready    worker   28s     v1.15.0

4.7 安装 Dashboard 插件

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml

修改service通过NodePort方式访问k8s dashboard

小技巧,由于后面的操作都是在 kube-system 名称空间中进行,可以设置个别名 ksys=kubectl -n kube-system 这样就可以使用ksys操作该名称空间了

alias ksys='kubectl -n kube-system'

ksys get svc
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   3h43m
kubernetes-dashboard   NodePort    10.102.227.67   <none>        443/TCP            3h39m

可以看到 kubernetes-dashboard service 在集群内部,无法再外部访问,为了方便访问,我们暴露kubernetes-dashboard 443端口给NodePort ksys edit svc kubernetes-dashboard 通过ksys edit svc 直接编辑service

ksys edit svc kubernetes-dashboard

把 type: ClusterIp 改为 type: NodePort。 参考如下


... ...

spec:
  clusterIP: 10.102.227.67
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31537
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort

... ...  

这时,我们再重新查看Service

ksys get svc
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   3h45m
kubernetes-dashboard   NodePort    10.102.227.67   <none>        443:31537/TCP            3h41m

可以看到当前NodePort 端口是随机的31537,通过ifconfig 查看节点ip地址,该节点ip为:192.168.159.101

通过谷歌浏览器访问 https://192.168.159.101:31537

d1

创建kubernetes-dashboard管理员角色

kubectl create serviceaccount dashboard -n default

然后

kubectl create clusterrolebinding dashboard-admin -n default --clusterrole=cluster-admin --serviceaccount=default:dashboard

最后生成token

kubectl get secret $(kubectl get serviceaccount dashboard -o jsonpath="{.secrets[0].name}") -o jsonpath="{.data.token}" | base64 --decode

生成的token如下:

eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRhc2hib2FyZC10b2tlbi01d2s3NiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJkYXNoYm9hcmQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJkOWM5ZGZiNS0yOTgyLTQzMzMtYjE0ZC1jYjY1ODAwYzVmZjciLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkYXNoYm9hcmQifQ.krpa4umk2aPO8OAIvVJvwmGcO-CKrpEwiGxriSu7iYmoM8qiBqtic8YbQpVtoW4I6orCvflOH1xzO4fJp2h7r-ElFUqCBLO6trm3ZsrbdfiewOPMlk6BN4wKH1E6DbkTycR_BbalxJqpSrBM19LZgjTAsLoUqMIaNr51vQGNhQCRS8lUfJRAbWA7GRspUz_rbFSNbtIKzFZWbyP1r_yY253e7lof8K7sf0WEUpSkf2pTyQXfe57bY_QyGl3J-k_a5mv4zqzu_9kDoD3jmHxBDq292lK1FzY17fMpwuR4lMCzoanx68gFvexNpZ_1oPbIs2eEPOTQ12Ew923zMYzBTw

把这个toke贴到上面的登录页的令牌框中,点击确认页面成功调整到管理页面

d2

以后,我们直接通过浏览器访问 https://192.168.159.101:31537/#!/cluster?namespace=default 就能进入管理后台

4.8 查看日志

journalctl -f -u kubelet

4.9 备注

如果安装失败,可以使用 kubeadm reset 命令将主机恢复原状,重新执行 kubeadmin init 命令进行安装

如果需要node节点重装可以使用下面的命令(个人偏好,不代表规范操作)

rm -rf /var/lib/kubelet/* && rm -rf  /etc/kubernetes/* && systemctl stop kubelet

apt-get purge kubelet kubeadm kubectl && apt-get install kubelet kubeadm kubectl

systemctl enable kubelet && systemctl start kubelet

总结

根据上面的安装指引,基本能搭建起一个四节点的kubernetes集群,接下来我们可以从集群环境出发根据kubernetes的相关知识点不断学习不断演练,加深对这个优秀开源软件的学习