k8s集群搭建
▶ 环境初始化
1.检查操作系统的版本
cat /etc/redhat-release
yum update
2.配置主机名解析hosts
3.时间同步
k8s要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间。
systemctl enable --now chronyd
date
4.禁用iptables和firewalld服务
k8s和docker在运行中会产生大量的iptables规则,为了不让系统规则跟他们混淆,直接关闭系统的规则
5.禁用selinux
vim /etc/selinux/config 修改SELINUX的值为disabled
setenforce 0
getenforce
6.禁用swap分区
vim /etc/fstab 注释掉swap分区一行
free -h查看是否关闭
7.修改Linux的内核参数
▪ 添加网桥过滤和地址转发功能
vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
▪ 加载网桥过滤模块(临时生效,永久生效需要编辑配置文件)
modprobe br_netfilter
▪ 重新加载配置
sysctl -p /etc/sysctl.d/kubernetes.conf
▪ 查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter
▪ 永久生效
tee /etc/sysconfig/modules/br_netfilter.modules <<EOF
modprobe br_netfilter
EOF
chmod +x /etc/sysconfig/modules/br_netfilter.modules
tee /etc/rc.sysinit <<EOF
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
EOF
lsmod | grep br_netfilter
8.配置ipvs功能
安装ipset和ipvsadm
yum install ipset ipvsadm -y
添加需要加载的模块写入脚本文件
cat <<EOF > /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
修改k8s配置,把mode修改为ipvs
kubectl -n kube-system edit cm kube-proxy
查看并删除kube-system,删除的它会自动重启,需要等到集群安装了,才可以修改
kubectl -n kube-system get pod
kubectl -n kube-system rollout restart daemonset kube-proxy
▶ 安装docker
1.安装指定版本
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install --setopt=obsoletes=0 docker-ce-24.0.9-1.el7 -y
2.配置daemon.json
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors":[
"https://docker.1ms.run",
"https://docker.m.daocloud.io"
]
}
EOF
3.安装cri-docker插件
yum install -y ~/cri-dockerd-0.3.1-3.el7.x86_64.rpm
systemctl daemon-reload
systemctl status docker
systemctl enable --now docker
systemctl enable --now cri-docker.service
systemctl status cri-docker.service
▶ 安装kubernetes组件
1.配置国内镜像源
编辑/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
重新生成缓存:yum makecache
2.安装kubeadm、kubelet和kubectl
yum install --setopt=obsoletes=0 kubeadm-1.28.2-0 kubelet-1.28.2-0 kubectl-1.28.2-0 -y
三个节点 都需要安装
3.配置kubelet的cgroup
编辑/etc/sysconfig/kubelet,添加下面的配置
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
4.设置kubelet开机自启
systemctl enable --now kubelet
▶ 准备集群镜像
1.通过下面的命令查看集群需要的镜像
kubeadm config images list
2.下载镜像
download-image.sh脚本文件:
#!/bin/bash
images=(
kube-apiserver:v1.28.2
kube-controller-manager:v1.28.2
kube-scheduler:v1.28.2
kube-proxy:v1.28.2
pause:3.9
pause:3.6
etcd:3.5.9-0
coredns:v1.10.1
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName registry.k8s.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done
docker tag registry.k8s.io/coredns:v1.10.1 registry.k8s.io/coredns/coredns:v1.10.1
▶ 集群初始化(只需要在master节点上执行)
1.创建集群
kubeadm_init.sh脚本:
#!/bin/bash
kubeadm init \
--kubernetes-version=v1.28.2 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--v=5 \
--cri-socket unix:///var/run/cri-dockerd.sock
若初始化出错,需要重新初始化,需要删除之前历史记录:
kubeadm reset --v=5 --cri-socket unix:///var/run/cri-dockerd.sock
提示信息输入Y
ipvsadm --clean
rm -rf $HOME/.kube
2.创建必要文件
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
3.其他子节点加入集群
▪ 查看加入工作节点命令:
kubeadm token create --print-join-command
▪ 若其他master节点加入,还需要获取证书:
kubeadm init phase upload-certs --upload-certs --v=999
▪ 完整加入节点命令:
kubeadm join 172.23.4.48:6443 \ --token abcdef.1234567890abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxx\
--v=5 --cri-socket unix:///var/run/cri-dockerd.sock
4.查看nodes状态
kubectl get nodes
显示STATUS应该为NOTReady,需要装网络插件
▶ 安装网络插件
1.配置文件kube-flannel.yml
第二节: 集群搭建 - WOLITA最下面有yaml文件
kubectl -n kube-flannel get pods -o wide #查看网络插件pod状态
2.查看集群节点的状态
kubectl get pods -A -o wide
▶ 服务部署
1.部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine
2.暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
3.查看服务状态
kubectl get pods,service
4.浏览器访问部署的nginx服务
▶ 辅助配置
• 配置tab命令补全
1.安装补全依赖包:
yum install -y bash-completion
2.配置永久生效:
echo "source /etc/profile.d/bash_completion.sh" >> ~/.bashrc
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc
• 配置yaml文件使用tab转换空格
vim ~/.vimrc
autocmd FileType yaml setlocal ts=2 sw=2 ai et