K8S初始化master单节点(不使用配置文件,直接只用Kebuadm init)

该文章主要记录初始化过程,及过程中遇到的问题

卸载之前安装过的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 (略),如果是版本较低的kubenetes,是利用docker进行部署的。版本高的会用contanierd部署

重要的是配置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
#如果本机没安装网络插件,一定不要忘记安装 kubernetes-cni, cri-tools是containerd的管理工具。
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 = []
#用containerd作为容器启动的详细步骤可参考: https://blog.csdn.net/Jailman/article/details/126504154

修复一些可能出现的bug:

yum install tc -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
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
#把admin.conf文件copy 到 $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 主服务器部署成功

posted @ 2024-03-12 14:59  希望能摸鱼的凛耶酱  阅读(254)  评论(0)    收藏  举报