首页 > 其他分享 >K8S初始化master单节点(不使用配置文件,直接只用Kebuadm init)

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

时间:2024-03-12 15:00:43浏览次数:31  
标签:配置文件 kubernetes kubelet rf etc init master rm kube

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

卸载之前安装过的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

相关文章

  • Minitorch笔记
    https://github.com/mukobi/Minitorch-Self-Study-Guide-SAIA/blob/main/README.md#what-is-thishttps://minitorch.github.io/srush/GPU-Puzzles:Solvepuzzles.LearnCUDA.(github.com)代码规范和提交black.#Formatallfilesflake8.#checkdocstringandetc.my......
  • Infinite Card Game
    先看这篇题解这篇题解最开始的贪心我在赛时的时候想到了的,所以说博弈论完全是可以用贪心的,不要怕但是这里贪心还有一个问题,在对手攻击力比这张牌防御力大的区间中,对手可能有多张牌的防御力最大,这个时候难道每一个点都要连边吗?其实不用,连接其中随便一个就好了,因为我们发现,在每一......
  • Visual Studio Code 配置文件关联
    在编写Linux的.service文件的时候,我发现.service文件的本质是INI文件。然而VSCode却并没有使用INI格式进行语法高亮。于是我通过如下设置使VSCode在遇到.service文件时自动使用INI格式的语法高亮:打开设置,搜索:files.associations,并添加一个项目:ItemValue......
  • 【Spring】BeanDefinition 深入了解
    1 前言今天想细细研究下BeanDefinition,至于为什么,主要是看了很多遍,没太关注mergedBeanDefinition所以比较好奇,它是干啥的呢?所以得先搞清BeanDefinition,开整。2 源码分析我们得先知道BeanDefinition在Spring这个大框架下是个什么位置。我的理解它就类似于Java中的......
  • Kubeadm init 自遇报错合集及解决方案
    kubeadminit命令:kubeadminit\--image-repositoryregistry.aliyuncs.com/google_containers\--kubernetes-version=v1.28.2\--apiserver-advertise-address=(masternodeipaddress)\--pod-network-cidr=192.244.0.0/16\--service-cidr=192.96.0......
  • dolphinscheduler 实现master宕机故障转移能力源码分析
    DS(dolphinscheduler)的master是去中心化的,而故障转移能力是由master完成的,那么是多个master同时干故障转移,还是选举出一个master来干这件事情呢?回归到源码进行分析1.master启动方法@PostConstructpublicvoidrun()throwsSchedulerException{....this.failoverE......
  • 在Docker中,Docker配置文件在哪里以及如何修改?
    Docker的主要配置文件通常位于Linux系统的/etc/docker/目录下,关键的配置文件是daemon.json。这个文件用于配置Docker守护进程(DockerDaemon)的各项参数,包括但不限于数据存储位置、网络设置、日志配置、信任代理等。查找和修改Docker配置文件的步骤如下:定位配置文件:Docker的......
  • nginx配置文件结构详解
    nginx配置文件(conf文件夹下nginx.conf文件为nginx配置文件)结构详解:main块(全局块):nginx全局信息,指令的相关配置events块:nginx工作模式,与用户网络连接的相关配置http块:http协议信息,代理,缓存,日志大多数功能和第三方模块的的相关配置server块:虚拟主机的相关配置(一个http块中可有......
  • dolphinscheduler master实现去中心化源码分析
    dolphinschedulerMaster服务是去中心化的,也就是没有master和slave之分,每个master都参与工作,那么它是如何每个Master服务去取任务执行时,每个Master都取到不同的任务,并且不会漏掉,不会重复的呢,下面从源码角度来分析这个问题MasterServer.java/***runmasterserver*/@PostC......
  • electron暴露配置文件(用户可随时修改)
    配置文件一般web前端项目配置文件,写死的放在src/config下,需要打包配置的放在.env文件中。但在electron项目中,如果配置数据更改,需要每次给用户打包升级肯定是行不通的。于是外部配置文件就是有必要的,具体实现方法也比较简单,通过fs去读写外部文件就可实现具体实现设置文件不被压......