赞
踩
什么是kubernetes
首先,他是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s)是Google开源的容器集群管理系统(谷歌内部:Borg)。在Docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。
Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,多扩多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和发现机制、內建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制以及多粒度的资源配额管理能力。同时Kubernetes提供完善的管理工具,涵盖了包括开发、部署测试、运维监控在内的各个环节。
还是那句话,官方文档永远是最好的参考资料:
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/
但是,仅供参考,因为墙的原因,并不完全适用于我们天朝子民。
操作系统 | 内核版本 |
---|---|
CentOS7 x86_64 | 4.4.217-1.el7.elrepo.x86_64 |
节点类型 | IP |
---|---|
Master | 192.168.73.133 |
worker | 192.168.73.129 |
worker | 192.168.73.130 |
首先,k8s是基于docker容器技术的,所以第一步应该先安装Docker。注意:本次安装需要上面所有的节点(Master、worker)都要安装Docker环境。
Docker 支持以下的 64 位 CentOS 版本:
该 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
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集群,本教程是基于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命令重启机器即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。