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重新起来进行测试,观察到正常

相关推荐
阿里云云原生3 分钟前
移动端性能监控探索:iOS RUM SDK 技术架构与实践
云原生
阿里云云原生10 分钟前
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
微服务·云原生
阿里云云原生1 小时前
Qoder 上线提示词增强功能,将开发者从“提示词”的负担中解放出来
云原生
suknna1 小时前
通过命令模拟pod创建
kubernetes
维诺菌1 小时前
k8s java应用pod内存占用过高问题排查
java·jvm·云原生·容器·性能优化·kubernetes
回忆是昨天里的海2 小时前
k8s安装-kubeadm join,将工作节点加入k8s集群
java·服务器·kubernetes
浪飘2 小时前
k8s device plugin
java·docker·kubernetes
冬夜戏雪2 小时前
milvus容器restart不成功,但docker仍在running问题排查
docker·容器·milvus
m0_579146652 小时前
docker desktop的容器间通信
docker·容器·php
helloworddm2 小时前
Orleans 与 Kubernetes 结合的价值分析
云原生·容器·kubernetes