k8s集群安装详细教程

三台主机分别更改主机名

hostnamectl set-hostname master

hostnamectl set-hostname node1

hostnamectl set-hostname node2

**查询主机名命令:

hostnamectl

三台主机配置主机名解析

cat>>/etc/hosts<<EOF
192.168.68.100 master
192.168.68.101 node1
192.168.68.102 node2
EOF

k8s要求集群内节点时间精确一致。这里使用chronyd进行时间同步,也可以使用 ntp ntpdate

systemctl start chronyd && systemctl enable chronyd

kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它们混淆,直接关闭系统的规则

systemctl stop firewalld && systemctl disable firewalld

selinux是linux系统下的一个安全服务,如果不关闭它,在安装集群中会产生各种各样的奇葩问题

setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

禁用swap分区

swapoff -a && sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab

修改linux的内核参数,添加网桥过滤和地址转发功能

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

重新加载 使内核参数配置生效

sysctl --system && modprobe br_netfilter && lsmod | grep br_netfilter

在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的

两者比较的话,ipvs的性能明显要高一些,但是如果要使用它,需要手动载入ipvs模块

yum install ipset ipvsadm -y

编辑需要添加的模块脚本

cat < /etc/sysconfig/modules/ipvs.modules

!bin/bash

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

添加执行权限,并执行脚本

添加执行权限

chmod +x /etc/sysconfig/modules/ipvs.modules

执行脚本

/bin/bash /etc/sysconfig/modules/ipvs.modules

查看是否加载成功

lsmod | grep -e ip_vs -e nf_conntrack_ipv4

重启服务器

reboot

安装docker

更新yum
yum update

卸载旧版docker

yum remove docker docker-common docker-selinux docker-engine

安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

yum install -y yum-utils device-mapper-persistent-data lvm2

设置阿里云的镜像源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

这里安装的是 20.10.24版本

yum -y install docker-ce-20.10.24-3.el7 docker-ce-cli-20.10.24-3.el7 containerd.io

配置镜像地址

mkdir /etc/docker && cat < /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"],
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 5,
"default-shm-size": "1G",
"debug": true,
"experimental": false,
"registry-mirrors":[
"http://hub-mirror.c.163.com",
"https://mirrors.tuna.tsinghua.edu.cn",
"http://mirrors.sohu.com",
"https://ustc-edu-cn.mirror.aliyuncs.com",
"https://ccr.ccs.tencentyun.com",
"https://docker.m.daocloud.io",
"https://x9r52uz5.mirror.aliyuncs.com",
"https://dockerhub.icu",
"https://docker.chenby.cn",
"https://docker.1panel.live",
"https://docker.awsl9527.cn",
"https://docker.anyhub.us.kg",
"https://dhub.kubesre.xyz"
]
}
EOF

重新加载daemon.json

systemctl daemon-reload

开机自启动

systemctl start docker && systemctl enable docker

清理docker缓存命令

docker system prune -a

kubernetes 安装
配置镜像源

cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
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
EOF

安装指定版本
安装kubeadm、kubelet和kubectl,这里安装的是1.23.17版本

yum -y install kubelet-1.23.17 kubeadm-1.23.17 kubectl-1.23.17

//配置kubelet的cgroup,与 3.3 配置相同:systemd

cat>/etc/sysconfig/kubelet<<EOF
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF

//开机自启kubelet
启动不先启动,因为后边的安装过程中会自动启动

systemctl enable kubelet

//准备集群镜像
由于网络原因,无法连接,下面提供了一种替代方案,直接使用阿里云镜像

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

//在master节点上创建集群(注意:下面address=后面的地址换成自己master的地址)

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

//创建必要文件
上边集群创建成功后,命令行会提示以下信息并在master节点执行

mkdir -p $HOME/ .kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u)😒(id -g) $HOME/.kube/config

//以下只在 node 服务器上执行
node节点加入集群
以下这个命令,是 5.1 创建集群成功后,会提示的一个命令,注意查看提示

kubeadm join 192.168.68.100:6443 --token 8587uc.o8knircuri8etnw2
--discovery-token-ca-cert-hash sha256:acc37967fb5b0acf39d7598f8a439cc7de88f439a3f4d0c9cae88e7901b9d3f

//网络插件安装(以下在 master 节点执行)

查看各个节点的状态kubectl get nodes,全部都是notready状态,需要安装网络插件。k8s支持多种网络插件,如flannel,calico,canal等,这里选择flannel。

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

//修改kube-flannel.yml文件中net-conf.json字段
network中地址要和初始化中地址一样10.244.0.0/16

这里放到root目录下,之后再使用配置文件启动fannel

kubectl apply -f kube-flannel.yml

稍等片刻,再次查看node状态,发现为ready

kubectl get nodes

//node节点添加kubectl命令
将master节点中/etc/kubernetes/admin.conf拷贝node节点服务器中/etc/kubenetes目录中
在master中执行

scp /etc/kubernetes/admin.conf root@node1:/etc/kubernetes

scp /etc/kubernetes/admin.conf root@node2:/etc/kubernetes

//分别进入node1和node2节点服务器执行
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

立即生效
source ~/.bash_profile

posted @ 2023-03-04 18:31  _快到碗里来  阅读(108)  评论(0编辑  收藏  举报