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节点创建存放证书目录
bashmkdir /root/key && cd /root/key
-
在master节点生成证书
bashopenssl 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节点删除原来的证书
bashkubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard
-
在master节点创建新的证书
bashkubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard
-
在master节点查看pod
bashkubectl get pod -n kubernetes-dashboard
-
在master节点删除pod,使其重新创建
bashkubectl delete pod kubernetes-dashboard-85f59f8ff7-zhbsd -n kubernetes-dashboard
-
在master节点等待pod重新起来进行测试,观察到正常