该文章主要记录初始化过程,及过程中遇到的问题
卸载之前安装过的K8s集群
点击查看详细代码
# 首先清理运行到k8s群集中的pod,使用
kubectl delete node --all
# 使用脚本停止所有k8s服务
for service in kube-apiserver kube-controller-manager kubectl kubelet etcd kube-proxy kube-scheduler;
do
systemctl stop $service
done
# 使用命令卸载k8s
kubeadm reset -f
# 卸载k8s相关程序
yum -y remove kube*
# 删除相关的配置文件
modprobe -r ipip
lsmod
# 然后手动删除配置文件和flannel网络配置和flannel网口:
kubectl delete -f kube-flannel.yml
rm -rf /etc/cni
rm -rf /root/.kube
# 删除cni网络
ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
# 删除残留的配置文件
rm -rf ~/.kube/
rm -rf /etc/kubernetes/
rm -rf /etc/systemd/system/kubelet.service.d
rm -rf /etc/systemd/system/kubelet.service
rm -rf /etc/systemd/system/multi-user.target.wants/kubelet.service
rm -rf /var/lib/kubelet
rm -rf /usr/libexec/kubernetes/kubelet-plugins
rm -rf /usr/bin/kube*
rm -rf /opt/cni
rm -rf /var/lib/etcd
rm -rf /var/etcd
# 更新镜像
yum clean all
yum makecache
安装Kubenetes集群(示例为初始化单master节点)
1. 准备工作
明确定义集群中机器的ip和hostname(所有节点都需要执行)
更新hosts文件,编辑集群服务器的/etc/hosts
文件,以如下的方式,另起一行添加:
这里有两个域名是因为机器本身域名设置(whdcinthe004)和再设置的域名(whdcinthe004.cn.infra)有些不同,可以写在同一行。
根据hosts文件中列好的主机名,设置对应机器的hostname,
方法一:
hostnamectl set-hostname whdcinthe004
方法二:
或者修改 /etc/hostname
文件,写入whdcinthe004
vim /etc/hostname
本示例中该路径下的机器名是whdcinthe004.cn.infra
禁用SELinux
setenforce 0(临时关闭)
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux(是彻底禁用,但需要重启服务器生效)
禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
禁用swap
swapoff -a (临时禁用)
sed -i 's/.*swap.*/#&/' /etc/fstab (永久禁用)
#或者直接到 /etc/fstab中,注释掉下面一行
#/dev/mapper/centos-swap swap
#也是重启服务器才会生效
所有节点添加网桥过滤和地址转发功能
常规会在/etc/sysctl.d/kubernetes.conf 路径下进行配置添加,点击可看代码
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
# 然后执行,生效
sysctl --system
或者可以直接在/etc/sysctl.conf` 中添加配置:
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
安装docker-ce (略)
重要的是配置docker的daemon.json文件,内容如下(使用systemd作为cgroup_driver,防止安装过程中出报错)
{
"exec-opts": ["native.cgroupdriver=systemd"],
//这一行是配置cgroup
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirror":["https://pf5f57i3.mirror.aliyuncs.com"]
//这一行是给docker配置下载镜像地址
}
安装bridge
# 1.安装bridge(Linux虚拟交换机)
yum install -y bridge-utils
# 2.为bridge(Linux虚拟交换机)加载br_netfilter模块
modprobe br_netfilter
更新kubernetes镜像源配置
如果是非官方linux OS,把镜像源改成国内源,这里是阿里云
如果是官方Linux,该配置文件会同时有一条语句下载kubernetes管理工具
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
# 这个repo的名字叫kubernetes
name=Kubernetes
# 它的地址
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/
# 启用它
enabled=1
# 使用它时需要gpgcheck
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/rpm/repodata/repomd.xml.key
EOF
安装kubenetes管理工具
yum install -y kubelet kubeadm kubectl cri-tools kubernetes-cni
#如果本机没安装网络插件,一定不要忘记安装cri-tools kubernetes-cni
systemctl enable kubelet && systemctl start kubelet
设置K8S cgroup-driver
vim /etc/sysconfig/kubelet
#到该路径下,把下面的配置写进去
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
更改后,让配置生效:
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
有必要可,可以删除containerd的配置文件
rm /etc/containerd/config.toml
systemctl restart containerd
#因为不是用containerd作为容器启动,这个配置文件可以删除,或者文件里更新为disabled_plugins = []
修复一些可能出现的bug:
yum install t -y
2.初始化Master 节点
指定网络地址段和镜像地址
点击查看代码
# kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.28.2 \
--apiserver-advertise-address=10.26.12.152 \
--pod-network-cidr=192.244.0.0/16 \
--service-cidr=192.96.0.0/16
# –apiserver-advertise-address # 集群通告地址(master 机器IP,这里用的万兆网)
# –image-repository # 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
# –kubernetes-version #K8s版本,与上面安装的一致
# –service-cidr #集群内部虚拟网络,Pod统一访问入口,可以不用更改,直接用上面的参数
# –pod-network-cidr #Pod网络,与下面部署的CNI网络组件yaml中保持一致,可以不用更改,直接用上面的参数
指定网络地址段和镜像地址
初始化成功后,注意系统给你的提示如下,需要自己进行参数配置:
点击查看代码
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
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
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 10.26.12.152:6443 --token 6adycx.yg4cvb65pzlkt6v2 \
--discovery-token-ca-cert-hash sha256:7cd067dd84ed97d4863cd8ee4af1e7adefa20657c6e599251c2148838a9512b5
复制配置文件到对应路径
mkdir -p $HOME/.kube
cd $HOME/.kube
mkdir config
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#把admin.conf文件放在$HOME/.kube/config路径下
sudo service kubelet restart
参考:https://blog.csdn.net/m0_55691056/article/details/129673193
3.配置kubelet网络
部署容器网络
CNI网络插件(在Master上执行,著名的有flannel、calico、canal和kube-router等,简单易用的实现是为CoreOS提供的flannel项目),这里使用Flannel实现。
下载kube-flannel.yml:
wget https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
然后修改配置文件,找到如下位置,修改 Network 与执行 kubeadm init 输入的网段一致:
net-conf.json: |
{
"Network": "192.244.0.0/16",
"Backend"": {
"Type": "vxlan"
}
}
修改配置之后安装组件(如果安装的时候卡在pull镜像的时候,试一试手动用docker将镜像拉取下来):
kubectl apply -f kube-flannel.yml
测试看网络连通性
kubectl get nsk
# 必须所有的容器都是Running
kubectl get pod -n kube-system
# 查看通信状态
kubectl get cs
# 获取主节点的状态
查看节点状态
[root@whdcinthe004 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
whdcinthe004.cn.infra Ready control-plane 22h v1.28.2
至此K8s master 主服务器部署成功
标签:配置文件,kubernetes,kubelet,rf,etc,init,master,rm,kube From: https://www.cnblogs.com/rinya09/p/18067854