docker-ce-v18.09.0+kubernetes-v1.15.1(k8s)集群环境+dashboard-v1.10.1搭建完整教程

一、k8s简介

什么是kubernetes
首先,他是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
  Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。

还是那句话,官方文档永远是最好的参考资料:

https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

但是,仅供参考,因为墙的原因,并不完全适用于我们天朝子民。

二、安装环境

操作系统内核版本
CentOS7 x86_644.4.217-1.el7.elrepo.x86_64

三、服务器

节点类型IP
Master192.168.73.133
worker192.168.73.129
worker192.168.73.130

四、Docker安装

首先,k8s是基于docker容器技术的,所以第一步应该先安装Docker。注意:本次安装需要上面所有的节点(Master、worker)都要安装Docker环境。

Docker 支持以下的 64 位 CentOS 版本:

  • CentOS 7
  • CentOS 8
  • 更高版本…

该 centos-extras 库必须启用。默认情况下,此仓库是启用的,但是如果已禁用它,则需要重新启用它。

建议使用 overlay2 存储驱动程序。

卸载旧版本
较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

安装 Docker Engine-Community
使用 Docker 仓库进行安装
在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

设置仓库
安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

使用以下命令来设置稳定的仓库。

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

安装 Docker Engine-Community
安装最新版本的 Docker Engine-Community 和 containerd,或者转到下一步安装特定版本:

$ sudo yum install docker-ce docker-ce-cli containerd.io

要安装特定版本的 Docker Engine-Community,请在存储库中列出可用版本,然后选择并安装:
1、列出并排序您存储库中可用的版本。此示例按版本号(从高到低)对结果进行排序。

$ yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable

2、通过其完整的软件包名称安装特定版本,该软件包名称是软件包名称(docker-ce)加上版本字符串(第二列),从第一个冒号(:)一直到第一个连字符,并用连字符(-)分隔。例如:docker-ce-18.09.1。

$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

启动 Docker。

$ sudo systemctl start docker

通过运行 hello-world 映像来验证是否正确安装了 Docker Engine-Community 。

$ sudo docker run hello-world

五、Docker和K8s版本兼容说明

Kubernetes主要做Docker的容器化管理,总结一下如何查看k8s对应支持的docker版本的方法。

在GitHub可以查看所有Kubernetets版本信息:https://github.com/kubernetes/kubernetes/releases

截止2019.08.09最新的版本支持信息:

Kubernetes 1.15.2 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.15.1 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.15.0 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.5 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.4 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.3 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.2 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.1 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.14.0 -->Docker版本1.13.1、17.03、17.06、17.09、18.06、18.09

Kubernetes 1.13.5 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.5 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.4 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.3 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.2 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.1 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.13.0 -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.12.* -->Docker版本1.11.1、1.12.1、1.13.1、17.03、17.06、17.09、18.06

Kubernetes 1.11.* -->Docker版本1.11.2到1.13.1、17.03

Kubernetes 1.10.* -->Docker版本1.11.2到1.13.1、17.03

查看方式:
点击链接进入到GitHub中查找对应的版本后点击 CHANGELOG-1.15.md
在这里插入图片描述
点进去查找docker versions
在这里插入图片描述

六、K8s集群安装

注:为了快速搭建k8s集群,本教程是基于kubeadm进行kubernetes的自动化安装部署。 下面开始我们的安装步骤:

一、设置ssh免密

这一步主要是完成各节点服务器之间可能免密登录,这是集群各节点之间数据通讯的基础条件。

二、在每台服务器上安装依赖包

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget

三、关闭防火墙 Linux 以及swap分区

systemctl stop firewalld
systemctl disable firewalld
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat
iptables -P FORWARD ACCEPT
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
#如果开启了swap分区,kubelet会启动失败(可以通过设置参数——-fail-swap-on设置为false)

四、分别修改主机名

hostnamectl --static set-hostname kmaster
hostnamectl --static set-hostname node1
hostnamectl --static set-hostname node2
#logout重新登陆即可生效

五、设置主机名映射

vim /etc/hosts		#添加以下内容并ping测试
	192.168.191.138	master
	192.168.191.139	worker1
	192.168.191.140	worker2

六、修改Docker驱动类型为systemd

修改或创建 vim /etc/docker/daemon.json,加入下述内容:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}

重启docker:

systemctl restart docker
systemctl enable docker.service  #设置开机自启动

七、设置k8s仓库

cat <<EOF > /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
EOF

八、配置内核参数,将桥接的IPv4流量传递到iptables的链

先执行:

cat >/etc/sysctl.d/k8s.conf <<EOF  
net.bridge.bridge-nf-call-ip6tables =1  
net.bridge.bridge-nf-call-iptables =1  
EOF

再执行:

sysctl --system

九、安装kubelet、kubeadm、kubectl

注:这里要对应上面Docker的安装版本,这里我们选择的k8s版本为v1.15.1

yum -y install kubelet-1.15.1 kubeadm-1.15.1 kubectl-1.15.1
systemctl enable kubelet.service

十、k8s 1.9.0版本以后在linux操作系统内核方面要求3.10.366以上,要升级内核可以使用以下方法:

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm;yum --enablerepo=elrepo-kernel install  kernel-lt-devel kernel-lt -y

安装完后可以查看是否默认为新的内核:

[root@k8s-node2 kubernetes]# egrep ^menu /etc/grub2.cfg|cut -f 2 -d \'  
CentOS Linux (4.4.113-1.el7.elrepo.x86_64) 7 (Core) 
CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) 
CentOS Linux (0-rescue-8a1328ef9a7247f09fe7bedb9a9d95c0) 7 (Core) 

十一、部署master节点

注:在master节点上进行如下操作

在master进行Kubernetes集群初始化。

注:运行以下命令前,物理机或虚拟机的CPU数量需要设置成2,否则会报错

1.初始化命令:

kubeadm init --kubernetes-version=1.15.1 --apiserver-advertise-address=192.168.73.133 --image-repository registry.aliyuncs.com/google_containers --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16

上述命令中,“kubernetes-version=1.15.1”中的1.15.1是对应上面的安装的k8s版本,
由于国外镜像地址被墙了,所以要特别指定使用国内的镜像地址:–image-repository registry.aliyuncs.com/google_containers;

成功后会显示类似如下信息:

kubeadm join 192.168.73.133:6443 --token 2duc4i.sthlvw8kqw6hlfwh \
    --discovery-token-ca-cert-hash sha256:44da90f993eb65cdca1f75ca1daca91e7bd70b9a3849e2174302d32844f43374

记录上面这个信息,用于后面集群中加入work node节点用,但是上面这个token是有时间限制的,超出时间范围就失效了,所以还是建议生成一个永久的token

2.配置kubectl工具

mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
kubectl get nodes
kubectl get cs

3.部署flannel网络
(这里建议,等master和node节点都加入集群后,在部署flannel网络,这时master会将flannel复制到各个node节点中;否则可能会出现node节点的STATUS为NOTREADY)

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

4.修改配置文件,使该NTP服务器在不联网的情况下,使用本服务器的时间作为同步时间

vim /etc/ntp.conf

把如下四行代码注释掉

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

在下面再添加两行

server 127.127.1.0 
fudge  127.127.1.0 stratum 0

保存后,重启

systemctl restart ntpd

十二、各node节点同步master节点服务器时间

在所有node节点上,执行同步master服务器时间命令:ntpdate -u {master-ip} //如果不同步时间,node节点加入Kubernetes集群时会卡住不动

十三、node节点加入集群

注:在所有node节点上进行如下操作

确保所有要创建和运行的pod的镜像名称,tag要修改成k8s.gcr.io/… 这种

执行如下命令,使所有node节点加入Kubernetes集群

kubeadm join 192.168.73.133:6443 --token 2duc4i.sthlvw8kqw6hlfwh \
    --discovery-token-ca-cert-hash sha256:44da90f993eb65cdca1f75ca1daca91e7bd70b9a3849e2174302d32844f43374

上面这个命令的信息,就是在master节点上初始化完毕后,生成的对应join信息,拿过来直接使用即可。

等到所有的worker节点都加入集群之后,接着部署flannel网络:

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

十四、集群状态监测

注:在master节点上进行如下操作

1.在master节点输入命令检查集群状态,返回如下结果则集群状态正常。

# kubectl get nodes 

重点查看STATUS内容为Ready时,则说明集群状态正常。

2.创建Pod以验证集群是否正常。

# kubectl create deployment nginx --image=nginx
# kubectl expose deployment nginx --port=80 --type=NodePort
# kubectl get pod,svc

十五、部署Dashboard

注:在worker节点上进行如下操作

1.创建Dashboard的yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

2.修改此yaml文件为:

1).注释掉Dashboard Secret ,不然后面访问显示网页不安全,证书过期,我们自己生成证书。
2).因为我选择nodeport访问dashboard,所以将service type字段设置为nodeport,并指定nodeport为30003,如下

打开下载的文件在Dashboard Service这一栏下面添加一项:type: NodePort,暴露出去 Dashboard 端口,方便外部访问。

例如:

# ------------------- Dashboard Service ------------------- #

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort  #新增
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30003  #新增
  selector:
    k8s-app: kubernetes-dashboard

将Dashboard Secret下面的内容都注释掉,如下:

# ------------------- Dashboard Secret ------------------- #

#apiVersion: v1
#kind: Secret
#metadata:
#  labels:
#    k8s-app: kubernetes-dashboard
#  name: kubernetes-dashboard-certs
#  namespace: kube-system
#type: Opaque

3.执行命令:

docker tag loveone/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1 

(由于kubernetes-dashboard.yaml中需要指向k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1)

4.最后创建pod, 命令:kubectl create -f kubernetes-dashboard.yaml

5.创建完成后,检查相关服务运行状态

kubectl get deployment kubernetes-dashboard -n kube-system
kubectl get pods -n kube-system -o wide
kubectl get services -n kube-system  (查看暴露在外部的服务)
netstat -ntlp|grep 30003

6.在Firefox浏览器输入Dashboard访问地址:https://192.168.73.133:30003

7.创建绑定用户

创建一个叫admin-user的服务账号:

[root@k8s01 ~]# cat admin-user.yaml 
# admin-user.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
[root@k8s01 ~]# kubectl create -f admin-user.yaml

直接绑定admin角色:

[root@k8s01 ~]# cat admin-user-role-binding.yaml 
# admin-user-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system
[root@k8s01 ~]# kubectl create -f  admin-user-role-binding.yaml

8.登陆所需要的token 获取方法:

命令:kubectl -n kube-system get secret

返回信息如下:

NAME                                             TYPE                                  DATA   AGE
admin-user-token-pjh6f                           kubernetes.io/service-account-token   3      5m35s

9.查询该用户token认证,复制此token

命令:kubectl -n kube-system describe secret admin-user-token-pjh6f

返回信息如下:

Name:         admin-user-token-pjh6f
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: 6e4b7ac6-beb6-4c25-94e7-22a029a74f0e

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLXBqaDZmIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI2ZTRiN2FjNi1iZWI2LTRjMjUtOTRlNy0yMmEwMjlhNzRmMGUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.VKHEVlHFUdFb8xeil-9GWOLyhG9rV6sssAsOfPz_w6GJbmiDdz0IQ1a226QWdsRA_C2pqFLoKsmiTgMYWcWK4jA1ijv47TV9_WXkha5Cw4cGl_4uL3RS86cY-4ngTXYAB3wP55XssWDcMgYbCmYUxlaGi6sy8f0MJl7JlY--pJftdOJQfaXgOI4CXKAc9bM-lRJPHFHJNAZma-72OmN_AdYtYDzkmZ2GuBh-62bqteeM9OgZgSH9Q2Z_BNvXn9hXN0O0n6L6QE962lwOjSxm0TA6spUL-gspQGx1_dctKTCuLcgWHcGtcP_BOZ5c6Zv3IVLeRqSnITRQPEqlhhXYwQ

10.将上面获取的token值,复制到dashboard登录页面的令牌选项中,即可完成ui界面登录。

在这里插入图片描述
至此,一个简单的三个节点的k8s集群环境搭建完成。

最后

下面列出以下常用的操作和异常解决方法:

##k8s集群节点退出加入操作

注意:以下操作都是在master下操作。===================================================

一:先将节点设置为维护模式(k8snode2是节点名称)
kubectl drain kmaster --delete-local-data --force --ignore-daemonsets node/kmaster
二:删除节点
kubectl delete node kmaster
kubectl delete node node1
kubectl delete node node2
三:确认是否已经删除
kubectl get nodes
四:生成永久Token(node加入的时候会用到)
kubeadm token create --ttl 0 --print-join-command
生成如下token:
kubeadm join 192.168.73.133:6443 --token 0jqcvg.zvdcfnf1fb3pu5xl \
    --discovery-token-ca-cert-hash sha256:e4c8cb068072eed065aec208bee04aac677462b0fa104e44886df01324cbb12f
五、查看Token确认
kubeadm token list
六、清空集群环境
kubeadm reset
七、删除之前的相关文件
rm -rf /etc/kubernetes/*
八、清空残留文件
rm -rf $HOME/.kube
九、重新启动master节点
systemctl restart kubelet

node重新加入

注意:以下操作在node下操作

一:重置kubernetes服务,重置网络。删除网络配置,link
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker

二:删除之前的相关文件
rm -rf /etc/kubernetes/*

三、清空集群环境
kubeadm reset

四、清空残留文件
rm -rf $HOME/.kube

五、启动kubelet
systemctl start kubelet

六:加入集群
kubeadm join 192.168.73.133:6443 --token 0jqcvg.zvdcfnf1fb3pu5xl \
    --discovery-token-ca-cert-hash sha256:e4c8cb068072eed065aec208bee04aac677462b0fa104e44886df01324cbb12f

错误分析工具:

1.kubectl describe node 主机名(节点名称,如node1)
2.journalctl -f  # 当前输出日志
3.journalctl -f -u kubelet  # 只看当前的kubelet进程日志
3.kubectl logs {podname} -n kube-system
4.kubectl describe -n kube-system pod/kubernetes-dashboard-65c76f6c97-htfxt
5.获取deployments:
kubectl get deployments -n kube-system -o wide
获取pods:
6.kubectl get pods -n kube-system -o wide
或者
kubectl get pod --all-namespaces
7.删除deployment:
kubectl delete -f kubernetes-dashboard.yaml 或
kubectl delete deployment kubernetes-dashboard -n kube-system
8.删除pod:
delete pod {podname} -n kube-system
9.部署pod:
kubectl create -f kubernetes-dashboard.yaml
10.可以查看k8s所需要的镜像列表
kubeadm config images list
11.查看角色绑定信息
kubectl get clusterrolebinding

常见问题

1.[WARNING Service-Docker]: docker service is not enabled, please run 'systemctl enable docker.service’
解决方法:需要配置成自动启动:

2.[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/
解决方法:修改或创建/etc/docker/daemon.json,加入下述内容:
{
“exec-opts”: [“native.cgroupdriver=systemd”]
}
重启docker:
systemctl restart docker
查看修改后的状态:
docker info | grep Cgroup

3.[WARNING Service-Kubelet]: kubelet service is not enabled, please run 'systemctl enable kubelet.service’
解决方法:需要配置成自动启动:

4.问题1:[ERROR FileAvailable–etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
问题2:It seems like the kubelet isn’t running or healthy.

解决方法:kubeadm reset 清空环境

5.ERROR FileContent–proc-sys-net-bridge-bridge-nf-call-iptables
解决方法:echo “1” >/proc/sys/net/bridge/bridge-nf-call-iptables
echo “1” >/proc/sys/net/ipv4/ip_forward

6.问题:通过journalctl -xeu kubelet命令分析运行kubeadm init初始化集群命令时的错误日志,存在以下错误信息,分别采用不用的解决方式,错误信息和解决方式如下:
错误信息1: F0401 12:18:28.099723 9513 kubelet.go:1370] Failed to start ContainerManager Cannot set property TasksAccounting, or unknown property
解决方式:升级systemd组件,我这个出问题的节点是CentOS 7.3, systemd版本是systemd-219-30,升级至systemd-219-62后问题解决。
运行命令yum list systemd*先查看当前最新的systemd版本,运行systemd升级命令:yum -y update systemd,升级到最新版本,目前最新的版本是219-67

7.问题:在node节点上执行命令kubectl get kubectl get pods --all-namespaces会报下面的错误:
Unable to connect to the server: x509: certificate signed by unknown authority
解决方式:
当前kubeadm reset命令会完全清除已创建的集群配置后,$HOME/.kube这个目录不会删除,需要手动删除,命令是:rm -rf $HOME/.kube,然后重新配置kubectl,命令如下:
mkdir -p /root/.kube
cp /etc/kubernetes/admin.conf /root/.kube/config
之后便可以使用了

8.问题:工作节点加入后,一直是NotReady状态。describe后发现报错如下:
Failed to update Node Allocatable Limits [“kubepods”]: failed to set supported cgroup
由错误日志可知是节点中的Cgroup不支持子系统pids所致。于是用uname -r查看内核版本:

uname -r
3.10.0-327.el7.x86_64
然后查看该内核所支持的CGROUP,发现的确不支持PIDS. 代码如下:
cat /boot/config-3.10.0-327.el7.x86_64 | grep CGROUP
返回信息如下:
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_NETPRIO_CGROUP=m

解决方法:升级内核,命令如下
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm;yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt -y

安装完后可以查看是否默认为新的内核:
[root@k8s-node2 kubernetes]# egrep ^menu /etc/grub2.cfg|cut -f 2 -d ’
CentOS Linux (4.4.217-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (4.4.217-1.el7.elrepo.x86_64) 7 (Core) with debugging
CentOS Linux 7 (Core), with Linux 3.10.0-229.el7.x86_64
CentOS Linux 7 (Core), with Linux 0-rescue-85d4dfaf76f847f6aff0e7e0b5b568f3

用grub2-set-default命令设置默认启动内核。利用设为0表示使用上一个命令输出的第一个内核。
grub2-set-default 0
然后用grub2-mkconfig命令生成配置文件并应用在grub.config文件中。
grub2-mkconfig -o /boot/grub2/grub.cfg
执行完毕后,用reboot命令重启机器即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值