K8s的部署

准备三台虚拟机

作用 IP地址 操作系统 配置 关键组件
k8s-master01 172.16.90.11 Rocky Linux release 9 2颗CPU 4G内存 50G硬盘 kube-apiserver, etcd, etc
k8s-node01 172.16.90.12 Rocky Linux release 9 2颗CPU 4G内存 50G硬盘 kubelet, kube-proxy
k8s-node02 172.16.90.13 Rocky Linux release 9 2颗CPU 4G内存 50G硬盘 kubelet, kube-proxy

主机操作系统说明

| 序号 | 操作系统及版本

Rocky Linux release 9 | 下载链接:

复制代码
https://mirrors.163.com/rocky/9.5/isos/x86_64/Rocky-9.5-x86_64-minimal.iso 

主机准备

关闭防火墙和selinux

给三台虚拟机更改源

复制代码
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
    -i.bak \
    /etc/yum.repos.d/rocky*.repo

安装epel仓库更换国内源(三台)

在 Rocky Linux 9 中启用并安装 EPEL Repo(三台)

启动CRP仓库(三台)

复制代码
dnf config-manager --set-enabled crb

dnf install epel-release

先备份一下安装好的源

复制代码
cp /etc/yum.repos.d/epel.repo  /etc/yum.repos.d/epel.repo.backup 
cp /etc/yum.repos.d/epel-testing.repo  /etc/yum.repos.d/epel-testing.repo.backup
cp /etc/yum.repos.d/epel-cisco-openh264.repo  /etc/yum.repos.d/epel-cisco-openh264.repo.backup

将 repo 配置中的地址替换为阿里云镜像站地址

复制代码
sed -e 's!^metalink=!#metalink=!g' \
    -e 's!^#baseurl=!baseurl=!g' \
    -e 's!https\?://download\.fedoraproject\.org/pub/epel!https://mirrors.aliyun.com/epel!g' \
    -e 's!https\?://download\.example/pub/epel!https://mirrors.aliyun.com/epel!g' \
    -i /etc/yum.repos.d/epel{,-testing}.repo

现在我们有了 EPEL 仓库,更新仓库缓存

复制代码
dnf clean all 
dnf makecache

配置三台机器的主机名

配置hosts解析

复制代码
vim /etc/hosts

192.168.1.54 k8s-master01
192.168.1.55 k8s-node1
192.168.1.56 k8s-node2

配置免密登录,只在k8s-master01上操作(生成密钥对)

复制代码
 ssh-keygen -f ~/.ssh/id_rsa -N '' -q

点拷贝秘钥到其他 2 台节点

复制代码
ssh-copy-id k8s-node1

 ssh-copy-id k8s-node2

时间同步(三台)

复制代码
sed -i '/^pool/ c pool ntp1.aliyun.com  iburst' /etc/chrony.conf

启动

复制代码
systemctl restart chronyd

systemctl enable chronyd

配置内核转发及网桥过滤(三台)

复制代码
vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness = 0

加载br_netfilter模块

复制代码
modprobe br_netfilter

查看是否加载

复制代码
lsmod | grep br_netfilter

使用新添加配置文件生效

复制代码
sysctl -p /etc/sysctl.d/k8s.conf

关闭交换分区 (三台)

永久关闭

复制代码
 sed -i 's/.*swap.*/#&/' /etc/fstab

启动ipvs服务器(三台)

复制代码
 vim /etc/modules-load.d                                                                                                                                   /ipvs.conf

配置内容

复制代码
br_netfilter
ip_conntrack
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip

下载

复制代码
dnf install ipvsadm ipset sysstat conntrack libseccomp -y

重启服务

systemctl restart systemd-modules-load.service

调整句柄数

复制代码
vim /etc/security/limits.conf

在文件末尾增加以下内容

复制代码
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* seft memlock unlimited
* hard memlock unlimitedd

查看修改结果

ulimit -a

系统优化

复制代码
vim  /etc/sysctl.d/k8s_better.conf

net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720

modprobe br_netfilter
lsmod |grep conntrack
modprobe ip_conntrack
sysctl -p /etc/sysctl.d/k8s_better.con

安装cri-dockerd(三台)

复制代码
wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16-3.fc35.x86_64.rpm
wget -c https://rpmfind.net/linux/almalinux/8.10/BaseOS/x86_64/os/Packages/libcgroup-0.41-19.el8.x86_64.rpm
yum install libcgroup-0.41-19.el8.x86_64.rpm
yum install cri-dockerd-0.3.16-3.fc35.x86_64.rpm

注意先下载 yum install libcgroup-0.41-19.el8.x86_64.rpm

启动cri-docker服务

systemctl enable cri-docker

cri-dockerd设置国内镜像加速
复制代码
vim /usr/lib/systemd/system/cri-docker.service

修改第十行内容

bash 复制代码
ExecStart=/usr/bin/cri-dockerd  --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9  --container-runtime-endpoint  fd://

重启Docker组件

复制代码
  systemctl daemon-reload && systemctl restart docker cr                                                                                    i-docker.socket cri-docker

检查Docker组件状态

复制代码
systemctl status docker cir-docker.socket cri-docker

K8S软件安装(三台)

配置kubernetes源

  • 添加阿里云YUM软件源

    vim /etc/yum.repos.d/kubernetes.repo

增加以下内容

bash 复制代码
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key

查看所有可用的版本

复制代码
yum list kubelet --showduplicates | sort -r |grep 1.32 

安装kubelet、kubeadm、kubectl、kubernetes-cni

复制代码
 yum install -y kubelet kubeadm kubectl kubernetes-cni

配置cgroup
为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。(三台)

复制代码
 vim /etc/sysconfig/kubelet

增加以下内容

bash 复制代码
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

设置kubelet为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动

systemctl enable kubelet

K8S集群初始化

只在master01节点上操作

bash 复制代码
 kubeadm config print init-defaults > kubeadm-init.yaml

编辑此文件

bash 复制代码
 vim kubeadm-init.yaml

修改如下配置:

  1. - advertiseAddress:为控制平面地址,( Master 主机 IP )

    修改为 advertiseAddress: 192.168.1.54

advertiseAddress: 1.2.3.4

    • criSocket:为 containerd 的 socket 文件地址

criSocket: unix:///var/run/containerd/containerd.sock
修改为 criSocket: unix:///var/run/cri-dockerd.sock

  1. - name: node 修改node为 k8s-master01

name: node
修改为 name: k8s-master01

  1. - imageRepository:阿里云镜像代理地址,否则拉取镜像会失败

    修改为:imageRepository: registry.aliyuncs.com/google_containers

imageRepository: registry.k8s.io

  1. - kubernetesVersion:为 k8s 版本

kubernetesVersion: 1.32.0
修改为:kubernetesVersion: 1.32.2
注意:一定要配置镜像代理,否则会由于防火墙问题导致集群安装失败
文件末尾增加启用ipvs功能

apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

注意yaml文件编辑冒号后要空格!!!

根据配置文件启动 kubeadm 初始化 k8s

bash 复制代码
kubeadm init --config=kubeadm-init.yaml --upload-certs --v=6
bash 复制代码
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

K8S集群工作节点加入

node1和node2配置-------所有的工作节点加入集群

bash 复制代码
kubeadm join 192.168.1.54:6443 --token abcdef.0123456789abcdef \
        --discovery-token-ca-cert-hash sha256:0fa6dc394e2f085dce6041fe008320315d0ad2ca45ac82e0114bb2aa828fdd10 --cri-socket unix:///var/run/cri-dockerd.sock

master查看kubectl get node


K8S集群网络插件使用

上传文件

编辑文件vim calico.yaml

查找CALICO_IPV4POOL_CIDR 将下方的value改成 10.244.0.0/16

查找image 版本改为3.28.0

三台机器上传此文件

加载

bash 复制代码
docker load -i calico.tar.gz

检查:

bash 复制代码
kubectl apply -f calico.yaml

Kubectl命令自动补全

bash 复制代码
yum -y install bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

master检查

bash 复制代码
kubectl get nodes
bash 复制代码
 kubectl get pod -n kube-system
bash 复制代码
kubectl get pod -A

部署成功后验证:

部署nginx

root@master \~\]# kubectl create deployment nginx --image=nginx:1.14-alpine ![](https://i-blog.csdnimg.cn/direct/d144da7893c2473abf54bf315f4d4378.png) # 暴露端口 \[root@master \~\]# kubectl expose deployment nginx --port=80 --type=NodePort # 查看服务状态 \[root@master \~\]# kubectl get pods,service ![](https://i-blog.csdnimg.cn/direct/bc0964e7728f42869c3f97fbbabb5c1b.png) **测试 输入:http://192.168.1.31261** ![](https://i-blog.csdnimg.cn/direct/24cae910aad847ceb69d890a43158390.png)

相关推荐
木子欢儿2 小时前
Debian系统清理垃圾
linux·运维·服务器·debian
谷晓光2 小时前
python中print函数的flush如何使用
linux·服务器·数据库
Hacker_Albert2 小时前
Linux 内核模块签名
linux
点PY2 小时前
构建rknn的docker镜像
运维·docker·容器
AdrichPro3 小时前
4、linux c 进程
linux·运维·服务器·c语言
佚名涙3 小时前
k8s调度机制:亲和性,污点,容忍
云原生·容器·kubernetes
why—空空5 小时前
linux系统CentOS 7版本搭建NFS共享存储
linux·运维·centos
不甘平凡--liang6 小时前
Linux Nginx安装部署、注册服务
linux·运维·服务器
SG.xf7 小时前
k8s中的微服务
微服务·容器·kubernetes