# 本文为原创内容,若需转载,请联系博主获取授权
一、基础设置
- 修改主机名
arduino
sudo hostnamectl set-hostname master-node1&&bash
sudo hostnamectl set-hostname worker-node1&&bash
- 添加主机域名解析
bash
sudo vim /etc/hosts
172.168.20.1 master-node1
172.168.20.2 worker-node1
- 关闭防火墙 (测试环境下)
arduino
sudo systemctl stop firewalld
sudo systemctl disable firewalld
- 关闭Selinux (测试环境下)
ini
sudo vim /etc/sysconfig/selinux
Selinux=disabled
- 关闭swap交换分区
bash
sudo swapoff -a
#永久关闭swap
sudo vim /etc/fstab (注释swap这行)
#/dev/mapper/rl-swap none swap defaults 0 0
- 更新系统内核
bash
sudo yum upgrade
#更新内核后需重启
- 加载永久变量、移除空规则
bash
sudo vim /etc/modules-load.d/k8s.conf
br_netfilter
#使配置文件生效
sudo systemctl restart systemd-modules-load.service
sudo iptables -F
- 修改linux内核(开启数据包转发功能)
ini
sudo vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
#加载配置文件
sudo sysctl -p /etc/sysctl.d/k8s.conf
- 为kube-proxy设置前置条件
bash
#下载ipvs转发包
sudo yum -y install ipvsadm
添加转发模块
sudo vim /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
#为文本添加权限,并使其生效
sudo chmod 755 /etc/sysconfig/modules/ipvs.modules
sudo /bin/bash /etc/sysconfig/modules/ipvs.modules
sudo lsmod | grep -e ip_vs -e nf_conntrack_ipv4
- 设置时间同步
bash
#系统默认自带chrony时间同步
sudo vim /etc/chrony.conf
server ntp.aliyun.com iburst (在ntp行,添加阿里云ntp时间同步器)
#重启时间同步chrony
sudo systemctl restart chrony.d
二、安装集群前依赖工具
-
下载yum仓库
sudo yum -y install yum-utils
-
添加docker-ce yum源
arduino
sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
下载docker-ce软件包(默认最新版本)
sudo yum -y install docker-ce
-
启动docker服务
bash
sudo systemctl enable docker
sudo systemctl start docker
注:虽然新版本已经弃用docker作容器运行时,但我们启动docker,可为后期拉取镜像上传镜像仓库做辅助作用,建议启动docker服务
- 配置docker加速器
bash
sudo vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.xuanyuan.me"]
}
- 载入配置文件,并重启docker服务
bash
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
- 下载crictl工具软件包并解压 (该工具主要用来把容器运行时与kubelet交互,替代了旧版本的dockeshim)
bash
#下载软件包
sudo wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.1/crictl-v1.26.1-linux-amd64.tar.gz
#解压软件包,并生效crictl工具
sudo tar zxvf crictl-v1.26.1-linux-amd64.tar.gz -C /usr/local/bin
- 生成containerd配置文件
arduino
sudo containerd config default > /etc/containerd/config.toml
- 修改pause、添加containerd加速器路径 (原文修改)
ini
sudo vim /etc/containerd/config.toml
sandbox_image="registry.aliyuncs.com/google_containers/pause:3.10"
SystemdCgroup = true
config_path = "/etc/containerd/certs.d"
- 配置containerd加速器路径
ini
#创建在containerd目录下的路径文件
sudo mkdir -p /etc/containerd/certs.d/docker.io
#为containerd添加加速器地址
sudo vim /etc/containerd/certs.d/docker.io/hosts.toml
server = "https://docker.io"
[host.["https://docker.xuanyuan.me"]
capabilities = ["pull", "resolve"]
- 启动containerd容器
bash
sudo systemctl deamon-reload
sudo systemctl enable containerd
sudo systemctl start containerd
- 配置容器运行时和拉取镜像时使用containerd
bash
#为容器运行时设置参数
sudo vim /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
#重启containerd容器
sudo systemctl restart containerd
- 设置容器运行时为containerd
arduino
sudo crictl config runtime-endpoint unix:///run/containerd/containerd.sock
三、安装k8s的三大组件kubeadm、kubelet、kubectl
- 定义k8s yum源
ini
sudo vim /etc/yum.repos.d/kubernetes.repo
[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
- 下载kubeadm、kubelet、kubectl软件包
rust
sudo yum -y install kubelet kubeadm kubectl
- 启动kubelet
bash
sudo systemctl enable kubelet --now kubelet
四、k8s集群初始化
- kubeadm初始化集群
ini
sudo kubeadm init \
--apiserver-advertise-address=你的masterIP地址 \
--kubernetes-version=你的k8s版本 \
--image-repository registry.aliyuncs.com/google_containers \
--cri-socket unix:///run/containerd/containerd.sock \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12
集群初始化过程需要等待一段时间
- 启动kubelet
bash
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
- 集群完之后可以在集群上找到这个代码
- 工作节点加入,这个跟kubectl启动代码一样,也可以在集群初始化完后查看到,然后直接把这个代码复制到工作节点上。
- 观察集群状态 这时候可以观察到有些pod是处于悬挂状态和各节点状态为NotReady,只有集群主件才运行起的;这个因为我们这个集群还没有安装网络插件,pod无法获取网络,导致pod一直处于悬挂状态。
- 安装网络插件(这里选择calico插件)
bash
#创建operator,方便网络管理
sudo kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/tigera-operator.yaml
#下载资源到本地
sudo wget https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/custom-resources.yaml
#修改pod网段地址
sudo vim custom-resources.yaml
这里修改为跟集群初始化指定pod-cidr网段一致,其他都不变
bash
#把资源创建到集群中
sudo kubectl apply -f custom-resources.yaml
-
再次查看pod状态,pod已经全部都是运行状态和各节点状态为Ready;该过程需要等待一段拉取镜像的时间。
恭喜各位热爱K8s的爱好者迈出了走向成功的第一步
关注博主,博主会定期更新文章