1、部署1master 3node四节点kubernetes集群。
一、环境准备
bash
1. 系统要求
- OS: Ubuntu 22.04 LTS
- 节点配置:2核CPU/4GB内存(master/node)
- 网络:节点间通信畅通,可访问互联网或国内镜像源
- 独占的hostname、MAC地址以及product_uuid,主机名能够正常解析
- 放行由Kubernetes使用到的各端口,或直接禁用iptables
节点规划:
IP地址 主机名 角色
192.168.10.6 k8s-master01.magedu.com Master
192.168.10.11 k8s-node01.magedu.com Worker
192.168.10.12 k8s-node02.magedu.com Worker
192.168.10.13 k8s-node03.magedu.com Worker
2. 系统配置
全局配置(所有节点执行)
# 配置 hosts 文件
cat <<EOF >> /etc/hosts
192.168.10.6 kubeapi.magedu.com k8s-master01
192.168.10.11 k8s-node01.magedu.com k8s-node01
192.168.10.12 k8s-node02.magedu.com k8s-node02
192.168.10.13 k8s-node03.magedu.com k8s-node03
EOF
# 设置唯一主机名(按节点执行)
hostnamectl set-hostname k8s-master01 # Master 节点
hostnamectl set-hostname k8s-node01 # Node01
hostnamectl set-hostname k8s-node02 # Node02
hostnamectl set-hostname k8s-node03 # Node03

二、系统初始化
bash
1. 禁用Swap
swapoff -a && sed -i '/swap/d' /etc/fstab
systemctl mask --now dev-sd*.swap
2. 禁用防火墙
ufw disable
3. 时间同步
apt install chrony -y
systemctl enable --now chrony
4. 可在master主机上执行下列命令对3台worker主机进行环境配置或直接在worker主机上执行命令
ssh 192.168.10.11 "swapoff -a && sed -i '/swap/d' /etc/fstab&&systemctl mask --now dev-sd*.swap"
ssh 192.168.10.11 "ufw disable"
ssh 192.168.10.11 "apt update&&apt install chrony -y&&systemctl enable --now chronyd"
ssh 192.168.10.11 "sed -i 's/pool .*/pool ntp.aliyun.com iburst/g' /etc/chrony/chrony.conf&&systemctl restart chronyd"
5. 内核参数优化
cat <<EOF > /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay && modprobe br_netfilter
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
三、容器运行时安装(Containerd)(所有节点)
bash
1. 安装Containerd(所有节点执行)
# 添加阿里云Docker源
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 安装Containerd
apt update && apt install -y containerd.io
# 配置Containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
# 修改配置文件(关键步骤)
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sed -i 's#registry.k8s.io/pause#registry.aliyuncs.com/google_containers/pause#g' /etc/containerd/config.toml
# 配置镜像加速(可选)
# 编辑/etc/containerd/config.toml,添加以下内容到对应位置:
# [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
# [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
# endpoint = ["https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com"]
# [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
# endpoint = ["https://registry.aliyuncs.com/google_containers"]
# 重启Containerd
systemctl restart containerd && systemctl enable containerd
2. 配置crictl客户端
# 编辑/etc/crictl.yaml
cat <<EOF > /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: true
EOF

四、Kubernetes 组件安装(所有节点)
bash
1. 配置阿里云镜像源
curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/deb/ /" | tee /etc/apt/sources.list.d/kubernetes.list
2. 安装 kubelet/kubeadm/kubectl
apt update && apt install -y kubelet=1.31.2-1.1 kubeadm=1.31.2-1.1 kubectl=1.31.2-1.1
systemctl enable kubelet
五、Master 节点初始化
bash
kubeadm config images list --image-repository=registry.aliyuncs.com/google_containers
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
bash
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --control-plane-endpoint="kubeapi.magedu.com" --kubernetes-version=v1.31.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --token-ttl=0 --upload-certs
配置 kubectl:
bash
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
六、部署Flannel网络插件
bash
# 下载并修改Flannel配置(替换镜像地址)
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
sed -i 's#ghcr.io/flannel-io/flannel#registry.aliyuncs.com/google_containers/flannel#g' kube-flannel.yml
sed -i 's#ghcr.io/flannel-io/flannel-cni#registry.aliyuncs.com/google_containers/flannel-cni#g' kube-flannel.yml
# 应用配置
kubectl apply -f kube-flannel.yml
# 检查Pod状态
kubectl get pods -n kube-system
kubectl get pods -n kube-flannel
七、Worker 节点加入集群
bash
1. 获取 Join 命令(Master 节点执行)
kubeadm token create --print-join-command
kubeadm join kubeapi.magedu.com:6443 --token nbjg5c.a56kyh7w017w2gbv --discovery-token-ca-cert-hash sha256:75114c3944106297de81e553513cec987678aeb989466a511a9643716e110ed5
2. 所有 Worker 节点执行 Join 命令
kubeadm join kubeapi.magedu.com --token nbjg5c.a56kyh7w017w2gbv --discovery-token-ca-cert-hash sha256:75114c3944106297de81e553513cec987678aeb989466a511a9643716e110ed5
八、验证集群状态
root@k8s-master01:~# kubectl get nodes -o wide

2、部署运行Wordpress;
bash
一、 克隆代码仓库
git clone https://github.com/iKubernetes/learning-k8s.git
cd learning-k8s/wordpress/
二、 部署 MySQL(临时存储)
# 创建命名空间
kubectl create namespace blog
# 部署 MySQL
kubectl apply -f mysql-ephemeral/ -n blog
# 等待 MySQL Pod 启动
kubectl get pods -n blog -l app=mysql -w
三、 部署 WordPress
# 部署 WordPress(Apache 版本)
kubectl apply -f wordpress-apache-ephemeral/ -n blog
# 验证 WordPress 状态
kubectl get pods -n blog -l app=wordpress -w
四、 暴露服务并访问
# 获取 NodePort
kubectl get svc -n blog wordpress
# 访问地址(示例)
# http://192.168.10.11:<NodePort>

3、命令式命令部署运行demoapp,验证Pod删除、扩容、更新等功能;
bash
一、 创建 Deployment
kubectl create deployment demoapp --image=nginx:1.23
二、 验证 Pod 运行
kubectl get pods -l app=demoapp
三、 扩容到 3 副本
kubectl scale deployment demoapp --replicas=3
kubectl get pods -l app=demoapp
四、 删除 Pod 并观察自愈
kubectl delete pod <Pod名称>
kubectl get pods -l app=demoapp -w
五、 滚动更新镜像
kubectl set image deployment/demoapp nginx=nginx:1.24
kubectl rollout status deployment/demoapp
六、 清理资源
kubectl delete deployment demoapp
