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 <
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 <
!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 <
{
"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 <
[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