一,安装环境
1,硬件要求
内存:2GB或更多RAM
CPU: 2核CPU或更多CPU
硬盘: 30GB或更多
2,本次环境说明:
操作系统:CentOS 7.9
内核版本:3.10.0-1160
虚拟机 | IP地址 | 节点 |
k8s-master | 192.168.1.20 | master |
k8s-node-1 | 192.168.1.25 | worker |
k8s-node-2 | 192.168.1.26 | worker |
二,环境前期准备工作(三台机器同步执行)
1,防火墙关闭
systemctl stop firewalld && systemctl disable firewalld
2,selinux关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config && setenforce 0
shutdown -r now重启机器
3,关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
4,设置主机名
在三台主机分别执行:
hostnamectl set-hostname k8s-master && bash
hostnamectl set-hostname k8s-node-1 && bash
hostnamectl set-hostname k8s-node-2 && bash
5,修改hosts文件
添加三台主机的地址及主机名

6,开启包转发功能和修改内核参数
modprobe br_netfilter
echo "modprobe br_netfilter" >> /etc/profile
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
7,配置生效
sysctl -p /etc/sysctl.d/k8s.conf
8,时间同步
yum install ntpdate -y
ntpdate cn.pool.ntp.org
echo "* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org >> /tmp/tmp.txt" >> /var/spool/cron/root
service crond restart
9,安装基础软件包
yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate telnet ipvsadm openssh-clients
10,安装docker和containerd
此处有坑,机器上我已预装了docker,再执行yum install -y containerd显示yum install找不到命令,查资料后发现containerd是作为docker的组件在安装docker的时候会被安装上的,无需再额外执行yum install -y containerd,如遇到相同问题可忽略报错
yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
systemctl start docker && systemctl enable docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://k73dxl89.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload && systemctl restart docker
三,k8s安装及使用containerd作为容器运行时
1,修改containerd配置文件(三台机器上执行)
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
修改配置文件:
vim /etc/containerd/config.toml
把SystemdCgroup = false修改成SystemdCgroup = true
把sandbox_image = "k8s.gcr.io/pause:3.6"修改成sandbox_image="registry.aliyuncs.com/google_containers/pause:3.7"
配置 containerd 开机启动,并启动 containerd
systemctl enable containerd --now
配置containerd镜像加速器
vim /etc/containerd/config.toml
找到config_path = "",修改成如下目录:
config_path = "/etc/containerd/certs.d"
保存退出
mkdir /etc/containerd/certs.d/docker.io/ -p
vim /etc/containerd/certs.d/docker.io/hosts.toml
#写入如下内容:
[host."https://vh3bm52y.mirror.aliyuncs.com"]
capabilities = ["pull"]
重启containerd:
systemctl restart containerd
2,配置containerd作为容器运行时
配置/etc/crictl.yaml文件
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF
systemctl restart containerd
3,备份原repo文件,替换阿里云yum源(三台机器上执行)
mkdir /root/repo.bak
mv /etc/yum.repos.d/* /root/repo.bak/
cd /etc/yum.repos.d/
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0
systemctl enable kubelet
4,初始化k8s集群
设置容器运行时(三台机器执行)
crictl config runtime-endpoint /run/containerd/containerd.sock
kubeadm config print init-defaults > kubeadm.yaml
apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.1.20 #修改为masterIP地址
bindPort: 6443
nodeRegistration:
criSocket: unix:///run/containerd/containerd.sock
imagePullPolicy: IfNotPresent
name: k8s-master #修改为master主机名
taints: null
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers #修改镜像仓库
kind: ClusterConfiguration
kubernetesVersion: 1.25.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 #新增指定pod网段
scheduler: {}
#添加以下字段
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: systemd
kubeadm init --config=kubeadm.yaml --ignore-preflight-errors=SystemVerification

看到此段证明安装成功;
根据提示执行以下命令:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
5,添加node工作节点
查看加入节点命令(master执行)
kubeadm token create --print-join-command
将输出结果后面添加--ignore-preflight-errors=SystemVerification在node节点上执行
kubeadm join 192.168.1.20:6443 --token ces4y0.ot8a5xq0d1uqbnlk --discovery-token-ca-cert-hash sha256:88f1fb41f7ee073362ce831be9baa68bd576b2953f2c01dd6068f87031ff94ae --ignore-preflight-errors=SystemVerification
kubectl get nodes

5,安装calico.yaml网络组件(master上执行)
wget -O https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f calico.yaml
四,愿为江水,与君相逢
到此k8s v1.25集群就安装完成了,如有问题或遗漏请留言指正。
谨以此文记录我们学习kubernetes的经历,希望能认识更多志同道合的朋友,一起分享遇到的问题和学习经验。