一、基本环境准备工作

设置hostname

1
hostnamectl set-hostname master
1
hostnamectl set-hostname node1 
1
hostnamectl set-hostname node2

关闭防火墙

1
2
systemctl stop firewalld
systemctl disable firewalld

查看ip

1
ip addr

master:192.168.19.101

node1: 192.168.19.102

node2: 192.168.19.103

设置host和ip绑定

1
vim /etc/hosts

三个节点相互可以ping通

1
2
3
ping master
ping node1
ping node2

系统初始化

关闭selinux

1
2
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时

关闭 swap

1
2
swapoff -a # 临时
vim /etc/fstab # 永久

将桥接的 IPv4 流量传递到 iptables 的链

1
2
3
4
5
6
7
# 配置
cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
sysctl --system

时间同步

1
2
yum install ntpdate -y
ntpdate time.windows.com

二、所有节点安装 Docker/kubeadm/kubelet

Kubernetes 默认 CRI(容器运行时)为 Docker,因此先安装 Docker。

(1)安装 Docker

1
2
3
4
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version

(2)添加阿里云 YUM 软件源

设置仓库地址

1
2
3
4
5
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

添加 yum 源

1
2
3
4
5
6
7
8
9
10
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
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

(3)安装 kubeadm,kubelet 和 kubectl

1
2
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet

三、部署 Kubernetes Master

在 192.168.19.101(Master)执行

1
kubeadm init --apiserver-advertise-address=192.168.19.101 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.6 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

image-20240612162900429

安装成功后,复制如下配置并执行

1
2
3
4
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes

image-20240612162909908

四、加入 Kubernets Node

获取master节点的token

如果 token 已经过期,就重新申请

1
kubeadm token create

token 没有过期可以通过如下命令获取

1
kubeadm token list

获取 –discovery-token-ca-cert-hash 值,得到值后需要在前面拼接上 sha256:

1
2
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'

在node节点输入

1
kubeadm join 192.168.19.101:6443 --token 01ypzs.0af41ttdb3o6ush9 --discovery-token-ca-cert-hash sha256:7b01f7fe1f03a38b845c506eccad67e30f781ac6cc7877e00af45f33b8b3cdf4

查看nodes

image-20240612162914428

输入kubectl get componentstatus查看组件状态

image-20240612162918366

输入kubectl get pods查看pod

image-20240612162921735

输入kubectl get pods -n kube-system查看指定命名空间的pod

image-20240612162924963

最上面两个pod没用准备好是因为没有网络

五、部署CNI网络插件

在/opt下创建k8s文件夹

在/opt/k8s下

1
curl https://calico-v3-25.netlify.app/archive/v3.25/manifests/calico.yaml -O

修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同

修改calico.yaml 文件中的 镜像地址

1
sed -i 's#docker.io/##g' calico.yaml

构建应用

1
kubectl apply -f calico.yaml