[k8s]非集群安装过程-笔记

本文档详细介绍了如何在CentOS7系统上搭建Kubernetes 1.23.5集群,包括升级内核、设置主机名、关闭不必要的服务、调整内核参数、安装Docker和Kubernetes组件,以及初始化主节点和加入Node节点。此外,还涉及了kubernetes-dashboard的安装,并给出了遇到问题时的排查步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境

  • OS: CentOS7
  • 内核版本kernel: 5.4.219-1.el7.elrepo.x86_64
  • k8s 版本:1.23.5 (特别注意1.24版本开始不再支持docker,本过程不适用)
  • docker: 20.10.18(engine)
    在这里插入图片描述
  • 机器配置: 8c/12G/500G
  • 机器一览表
ip主机名备注
192.168.1.60centos-k8s-master-60master节点
192.168.1.61centos-k8s-node-61node节点
192.168.1.62centos-k8s-node-62node节点
  • 其他建议提前安装的工具
  • wget、curl、net-tools、vim、git、jq

准备工作

此过程所有机器上操作

升级内核版本

参见Centos7升级内核版本

设置主机名及hosts更新

  1. 通过如下命令或修改/etc/hostname 文件依次修改k8s机器的各主机名
hostname set-hostname centos-k8s-master-60
  1. 修改hosts文件,添加主机名解析记录(修改/etc/hosts文件,添加本次需要操作的三条主机名和对应ip解析),效果如下:
    在这里插入图片描述
    重启后生效,可继续操作一块儿重启

关闭swap分区

使用如下命令检查是否开启了swap分区

free -m 

显示如下则可跳过本步骤
在这里插入图片描述
当上图中的swap分区total不为0时则需要进行如下操作进行关闭(安全起见,也可以按需进行如下检查)

  1. 禁用swap交换区
swapoff -a
  1. 永久关闭,修改文件 /etc/fstab,删除swap分区记录
    如下图标记黄色的部分
    在这里插入图片描述
    修改后的文件如下:
    在这里插入图片描述
    重启后生效,可继续操作一块儿重启

关闭selinux

  1. 执行如下命令修改为permissive模式
#当提示SELinux is disabled即已经关闭
setenforce 0
  1. 修改/etc/selinux/config文件,关闭selinux
    即修改SELINUX=disabled 修改结果如下:
    在这里插入图片描述
    重启后生效,可继续操作一块儿重启

关闭firewalld

执行如下命令,依次关闭及取消开机自启

systemctl stop firewalld
systemctl disable firewalld

调整时区及自动对时

开启iptables

  1. 安装
yum install -y iptables iptables-services
  1. 启用并设置iptabls
systemctl start iptables
systemctl enable iptables
#清除所有规则
iptables -F
#保存规则
service iptables save

启用ipvs模式

  1. 安装
yum install -y ipvsadm ipset
  1. 开机自动加载相关模块
    创建文件:/etc/sysconfig/modules/ipvs.modules,写入如下内容
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
#部分教程声明的是nf_conntrack_ipv4,实则最后启动服务时会报错!该模块也无法加载
modprobe -- nf_conntrack
  1. 生效模块加载内容
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
#lsmod 查看加载模块情况
lsmod |grep nf_conntrack

安装

调整内核参数

所有机器执行

  1. 新建文件: /etc/sysctl.d/k8s.conf 写入如下内容:
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
  1. 加载
#如果执行报错可先忽略
sysctl -p /etc/sysctl.d/k8s.conf

安装docker-ce

所有机器执行

  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

安装kubelet、kubeadm、kubectl

所有机器执行

  1. 配置yum源信息 ,新建文件/etc/yum.repos.d/kubernetes.repo 内容如下:
[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
  1. 更新
 yum update
  1. 安装
#不指定版本的情况下默认最新版本,因为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
  1. 修改安装文件
  • 修改本地api地址 localAPIEndpoint.advertiseAddress 当前主机点的ip
  • 修改镜像仓库地址 imageRepository
  • 修改要安装的版本 kubernetesVersion
  • 设置pod网段: networking.podSubnet 注意提前规划好网络,避免冲突
  • 设置ipvs,在最后新增如下内容
---
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.6
  1. 初始化主节点
kubeadm 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/config
  1. 查看节点信息
kubectl 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 {命令空间}

安装flannel

  1. 下载flannel的yaml文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  1. 创建
kubectl apply -f kube-flannel.yml

也可以先将其中的镜像文件下载然后再进行创建
3. 查看 flannel
当flannel完成创建后coredns的状态也将转Running,此时master的状态也应该由NotReady转入Ready
在这里插入图片描述

加入Node节点

  1. 使用初始化主节点时最后的日志中的命令将node节点加入
kubeadm join 192.168.1.60:6443 --v=6  --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:8df9dcae2618fcf9430d833f1f96f

在这里插入图片描述
出现如下内容即为加入成功在这里插入图片描述
2. 查看node状态

kubectl get node

在这里插入图片描述

安装kubernetes-dashboard

  1. 下载yaml文件
    详细版本匹配情况参见: https://github.com/kubernetes/dashboard/releases
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
  1. 创建
kubectl apply -f recommended.yaml
  1. 修改svc 暴露端口(亦可以通过修改上一步的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/
在这里插入图片描述

  1. 查看token
#查找(当不确定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登录
在这里插入图片描述

附录

  1. kube-proxy ipvs failed complete: unrecognized feature gate: SupportIPVSProxyMode

初始化时去掉featureGates.SupportIPVSProxyMode: true 参数

  1. flannel的yaml文件样例
  2. dashboard的yaml文件样例
  3. 卸载k8s
#执行如下命令,并根据提示进行进一步的重置(如果需要)
kubeadm reset

在这里插入图片描述
5. 新增node加入集群

  1. 按照如上步骤初始化及安装kubeadm、kubelet等内容
  2. 从其他node节点导入镜像
  3. kubeadm token create --print-join-command 生成加入命令
  4. 新节点执行加入命令
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值