欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

kubeadm部署k8s

程序员文章站 2022-07-12 16:15:43
...

 

通过kubeadm init初始化master

 

服务器
名称 ip
k8s-master 192.168.2.131
k8s-node01 192.168.2.132
k8s-node02 192.168.2.133

linux内核版本(所有节点)

确保服务器版本linux内核支持k8s安装 , 我使用的是linux5.12,如果版本不支持kubeadm init 执行的时候会报错

报错CONFIG_CGROUP_PIDS: not set;CGROUPS_PIDS: missing

 

  1. 查询linux版本

 

uname -a

 如果版本太低,需要升级linux内核版本(所有节点)

 

 

#1、导入key
rpm -import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

#2、安装 elrepo 的yum源
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

#3. 安装内核,在yum的elrepo源中,有最新版本内核。直接yum安装即可。
yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel –y

#4、查看当前可用内核版本:
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

#5、选择最新内核版本,0代表查看当前可用内核版本列表的左侧索引号
grub2-set-default 0

#6、生成grub文件
grub2-mkconfig -o /boot/grub2/grub.cfg

#7、重启系统
reboot

 

 

设置hostname(所有节点)

 

 

#1、必须跑
hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node01

hostnamectl set-hostname k8s-node02

#2、必须跑
echo  k8s-master 192.168.2.231 >> /etc/hosts && echo k8s-node01 192.168.2.232 >> /etc/hosts && echo k8s-node02 192.168.2.233 >> /etc/hosts

 

 

 

以上代码第一步没跑会出问题,node名称不正常,后面kubeadm新增节点的时候也会节点名称不正常

 

 

 

关闭防火墙(所有节点)

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

 

关闭selinux(所有节点)

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config  # 永久 需重启
setenforce 0   # 临时

 

关闭swap(所有节点)

swapoff -a
sed -i 's/^[^#].*swap/#&/' /etc/fstab
systemctl daemon-reload

 

若要启用swap设备,则需要在集群初始化时添加--ignore-preflight-errors=swap,意义为忽略因swap设备导致的报错

关闭ipv6(所有节点)

echo net.ipv6.conf.all.disable_ipv6=1 >> /etc/sysctl.conf
echo NETWORKING_IPV6=no >> /etc/sysconfig/network
sed -i 's/IPV6INIT=yes/IPV6INIT=no/g' /etc/sysconfig/network-scripts/ifcfg-ens33
sysctl -p
ip a             # 查看ipv6是否关闭

 

将桥接的IPv4流量传递到iptables(所有节点)

 

cat >/etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables =1
net.bridge.bridge-nf-call-iptables =1
EOF

sysctl --system  # 生效

 

 同步时间(所有节点)

 

yum install -y ntpdate
ntpdate time.windows.com
sudo rm -f /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

 

安装docker(所有节点)

 

#1、下载源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#2、安装docker
yum -y install docker-ce-18.06.1.ce-3.el7
#3、启动docker
systemctl enable docker && systemctl start docker
#4、查看docker版本,看看有没有装成功
docker --version

 

 修改docker下载地址

vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.2.233"],
"exec-opts":["native.cgroupdriver=cgroupfs"],
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com"]
}

 不能有中文,不然docker重启报错。

 

 

重启进程

systemctl daemon-reload
systemctl restart docker

 

 

安装k8s(所有节点)

#1、指定源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
#2、安装相关组件
yum install kubeadm.x86_64 kubectl.x86_64 kubelet.x86_64 -y
#3、启动kubelet服务
systemctl enable kubelet.service
systemctl start kubelet.service

 

 

 

k8s集群初始化(master节点执行)

kubeadm init   --apiserver-advertise-address=192.168.2.231   --image-repository registry.aliyuncs.com/google_containers   --kubernetes-version v1.21.1   --service-cidr=10.96.0.0/12   --pod-network-cidr=10.244.0.0/16

如果不能下载docker镜像,报错如:

failed to pull image docker.mirrors.ustc.edu.cn/google_containers/coredns/coredns:v1.8.0: output: Error response from daemon: manifest for docker.mirrors.ustc.edu.cn/google_containers/coredns/coredns:v1.8.0 not found,则需要docker pull 镜像

docker pull coredns/coredns:v1.8.3
docker tag coredns/coredns:v1.8.0 gotok8s/coredns:v1.8.0
.....


kubeadm init   --apiserver-advertise-address=192.168.2.231   --image-repository gotok8s  --kubernetes-version v1.21.1   --service-cidr=10.96.0.0/12   --pod-network-cidr=10.244.0.0/16

 

调整

注释以下两个文件的port=0的配置

/etc/kubernetes/manifests/kube-controller-manager.yaml

/etc/kubernetes/manifests/kube-scheduler.yaml

 

node加入集群

在master节点执行kubeadm token create --print-join-command ,获取join脚本

在node节点执行

 

kubeadm join 192.168.2.231:6443 --token 2b8ic3.05a95b6sdkhosyl3 --discovery-token-ca-cert-hash sha256:fd7ba1fdbd4e468feec1bf3918beb7b22dfb1fda43072d174a00e3c907e25e5a
 

 

 

 失败重装

 

如果安装失败,执行命令:systemctl status kubelet 出现错误日志:Container not found in pod's containers ,把配置删掉再来一遍

 

kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker
 

 

相关标签: k8s部署 kubeadm