

ip | 主机名 | 备注 |
|---|---|---|
192.168.1.60 | centos-k8s-master-60 | master节点 |
192.168.1.61 | centos-k8s-node-61 | node节点 |
192.168.1.62 | centos-k8s-node-62 | node节点 |
此过程所有机器上操作
参见Centos7升级内核版本
hostname set-hostname centos-k8s-master-60
重启后生效,可继续操作一块儿重启
使用如下命令检查是否开启了swap分区
free -m 显示如下则可跳过本步骤

当上图中的swap分区total不为0时则需要进行如下操作进行关闭(安全起见,也可以按需进行如下检查)
swapoff -a
修改后的文件如下:

重启后生效,可继续操作一块儿重启
#当提示SELinux is disabled即已经关闭
setenforce 0
重启后生效,可继续操作一块儿重启
执行如下命令,依次关闭及取消开机自启
systemctl stop firewalld
systemctl disable firewalld略
yum install -y iptables iptables-servicessystemctl start iptables
systemctl enable iptables
#清除所有规则
iptables -F
#保存规则
service iptables saveyum install -y ipvsadm ipsetmodprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
#部分教程声明的是nf_conntrack_ipv4,实则最后启动服务时会报错!该模块也无法加载
modprobe -- nf_conntrackchmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
#lsmod 查看加载模块情况
lsmod |grep nf_conntrack所有机器执行
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv6.conf.all.disable_ipv6=1#如果执行报错可先忽略
sysctl -p /etc/sysctl.d/k8s.conf所有机器执行
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update -y
yum install -y docker-ce新增配置文件 /etc/docker/daemon.json写入镜像地址及cgroup默认配置,如下内容
{
"registry-mirrors": ["https://jo9w2k2o.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}重启docker
systemctl restart docker
systemctl restart docker-ce
systemctl enable docker所有机器执行
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg yum update#不指定版本的情况下默认最新版本,因为1.24之后不再对docker支持,配置方法另有不同,这里指定版本1.23.5
#如果已经安装了高版本可通过`yum remove kubelet`进行移除
yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5#导出初始化配置到文件
kubeadm config print init-defaults>kubeadm-config.yaml---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
#有些教程里要求添加如下两行内容,实际在1.20以后的版本会因为这个问题无法启动,参见备注1
#featureGates:
# SupportIPVSProxyMode: true
mode: ipvs文件修改点标记如下:

2. 下载所需镜像 这一步也可以不执行,但是初始化的过程中会灰常的慢 PS:默认镜像拉取策略是(IfNotPresent)本地有就不再远程下载,这一步也可以作为配置修改结果的检查
#根据配置文件列举出镜像清单(上一步创建的kubeadm-config.yaml )
kubeadm config --config=kubeadm-config.yaml images list
根据列出的清单,使用docker pull进行镜像下载
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.23.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.23.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.23.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.23.5
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.1-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:v1.8.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.6kubeadm init --config=kubeadm-config.yaml --upload-certs --v=6 | tee kubeadm-init.log–v: 代表日志级别,数越大打印的约详细
这个过程中可能出现各种错误,注意调整–v参数以尽可能的详细列举出错误原因,根据原因逐个解决,一般准备工作做的充分的话这一步也基本就很快二就过了。

4. 初始化 根据如上日志文件内容的提示完成响应的操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configkubectl get node此时节点信息应该是NotReady状态

原因是网络插件未就绪,需要配合flannel或者calico使用,这里并不建议直接进行下一步,反而建议检查下现在的pod状态 6. 验证pod状态
kubectl get pod -A查看当前pod的状态,如有非Running状态应注意区分(coredns的状态可以先不关注),特别是kube-proxy(一般网络配置错误状态为CrashLoopBackOff)
#根据kubectl get pod -A 的查询结果进行如下操作
#查看pod状态(这里可能有错误原因)
kubectl describe pod {pod名称} -n {命令空间}
#查看pod的log
kubectl logs {pod名称} -n {命令空间}根据原因修改对应内容,然后重新删除pod等待重建即可
#删除pod
kubectl delete pod {pod名称} -n {命令空间}wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f kube-flannel.yml也可以先将其中的镜像文件下载然后再进行创建 3. 查看 flannel 当flannel完成创建后coredns的状态也将转Running,此时master的状态也应该由NotReady转入Ready

kubeadm join 192.168.1.60:6443 --v=6 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:8df9dcae2618fcf9430d833f1f96f
出现如下内容即为加入成功

2. 查看node状态
kubectl get node
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yamlkubectl apply -f recommended.yaml
增加修改如下内容:

#通过命令行修改
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard#执行将service的type从ClusterIP修改为NodePort

4. 通过svc信息查看dashboar端口
kubectl get svc -A -o wide
如上知道dashboard 地址为: https://192.168.1.60:31840/

#查找(当不确定kubernetes-dashboard在哪个命名空间下时可通过上一步的yaml文件内容查看或者使用-A参数在全部namespace下查找)
kubectl -n kubernetes-dashboard get secret |grep kubernetes-dashboard-token
#查看secret
kubectl describe secret kubernetes-dashboard-token-lwmnx -n kubernetes-dashboard
6. 通过token登录

初始化时去掉featureGates.SupportIPVSProxyMode: true 参数
#执行如下命令,并根据提示进行进一步的重置(如果需要)
kubeadm reset
5. 新增node加入集群