K8S环境搭建

K8S环境搭建

前置条件
  • 部署3台VM,一台作为master,两台作为slave
  • 需要保障vm之间网络是互通的

为vm安装docker

bash 复制代码
# 安装/更新 yum-utils
yum install -y yum-utils

#添加阿里镜像稳定版仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#安装最新版docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

#安装完成后启动docker
sudo systemctl start docker

#检查docker运行状态
sudo service docker status

配置docker镜像加速

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

bash 复制代码
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]//修改为你自己的镜像加速地址
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

查看加速是否配置成功

bash 复制代码
sudo docker info

关闭交换区

bash 复制代码
# 查看 交换分区
free -m

# 将 SELinux 设置为 permissive 模式(相当于将其禁用)  第一行是临时禁用,第二行是永久禁用
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

# 关闭swap;第一行是临时禁用,第二行是永久禁用
swapoff -a  
sed -ri 's/.*swap.*/#&/' /etc/fstab

# 允许 iptables 检查桥接流量 (K8s 官方要求)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 让配置生效
sysctl --system
bash 复制代码
# 禁用 selinux
vim /etc/selinux/config
SELINUX=disabled

# 关闭swap
swapoff -a  # 临时
vim /etc/fstab  # 永久
# 注释下面这行
#/dev/mapper/centos-swap swap                    swap    defaults        0 0

# 查看是否成功
free -m
安装K8S三大件

安装 kubelet、kebeadm、kubectl

bash 复制代码
# 配置 k8s 的 yum 源地址
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
   http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
bash 复制代码
# 安装 kubelet、kubeadm、kubectl
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

# 启动kubelet
systemctl enable --now kubelet

# 查看 kubelet 状态:一会停止 一会运行。 这个状态是对的,kubelet 等待 kubeadm 发号指令。
systemctl status kubelet

下载master节点组件

bash 复制代码
# 配置镜像,生成 images.sh
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

# 拉取镜像
chmod +x ./images.sh && ./images.sh
  • 建议为三台机器同时安装,不用区分对待,如需单独下载可以使用如下命令
bash 复制代码
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/kube-proxy:v1.20.9

初始化主节点

bash 复制代码
# 所有机器添加 master 域名映射,以下 IP 为 master 的 IP;
# 访问 cluster-endpoint 即 访问 172.31.0.4
echo "10.187.99.123 cluster-endpoint" >> /etc/hosts

# 主节点初始化 (只在 master 服务器执行, 其他 node 不用)
# --apiserver-advertise-address: master 的 IP
# --control-plane-endpoint: master 的域名
# --service-cidr 和 --pod-network-cidr 是网络范围,建议不要改。要改的话 2 个cidr 和 vps(172.31.x.x) 的,3 个网络互相不能重叠;还要修改 calico.yaml的 IP(下图有写)。
kubeadm init \
--apiserver-advertise-address=10.187.99.123 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16

安装网络插件calico

bash 复制代码
# 下载配置文件
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
# 加载配置
kubectl apply -f calico.yaml 

生成新令牌

bash 复制代码
kubeadm token create --print-join-command
部署dashboard

kubernetes官方提供的可视化界面

https://github.com/kubernetes/dashboard

bash 复制代码
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

遇到浏览器无法访问,按照以步骤处理

  • 在master节点创建存放证书目录

    bash 复制代码
    mkdir /root/key && cd /root/key
  • 在master节点生成证书

    bash 复制代码
    openssl genrsa -out dashboard.key 2048 
    openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.1.31'
    openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
  • 在master节点删除原来的证书

    bash 复制代码
    kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
  • 在master节点创建新的证书

    bash 复制代码
    kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
  • 在master节点查看pod

    bash 复制代码
    kubectl get pod -n kubernetes-dashboard
  • 在master节点删除pod,使其重新创建

    bash 复制代码
    kubectl delete  pod kubernetes-dashboard-85f59f8ff7-zhbsd  -n kubernetes-dashboard
  • 在master节点等待pod重新起来进行测试,观察到正常

相关推荐
Waay2 小时前
K8s ETCD 详解|备份恢复+静态Pod原理+kubectl查询底层流程(面试必考)
面试·kubernetes·etcd
松岩2 小时前
dcgm-exporter部分指标
kubernetes
我是谁??4 小时前
ubuntu22.04 通过docker部署vLLM(Qwen3-0.6B)大模型+New API+OpenWebUI
docker·容器·vllm
Patrick_Wilson5 小时前
K8s 探针避坑:Next.js 不同部署模式下的健康检查实践
kubernetes·node.js·next.js
运维瓦工5 小时前
DevOps 生态介绍(十):Docker Compose 核心 YAML 配置详解与常用命令大全
spring cloud·docker·容器
Plastic garden5 小时前
K8s(10)NFS 的动态 PV 创建数据库给k8s的mysql和redis
docker·容器·kubernetes
Plastic garden5 小时前
k8s(11) Pod 控制器,服务发现与存储管理
kubernetes
与海boy6 小时前
docker compose minio
docker·容器·eureka
星辰徐哥6 小时前
云原生核心特性:容器化、微服务与DevOps的通俗解读
微服务·云原生·devops