K8S 云集群安装纯享版 - 傻瓜式一键教程 全自动脚本文件

目录

  • 0. 技术选型( :bell: 重要!)
    • 0.0 version
    • 0.1 云服务器
  • 1. 容器运行时
  • 2. k8s 安装前准备
    • 2.0 网络连接
    • 2.1 hostname
    • 2.2 其他配置
  • 3 安装 k8s
    • 3.0 kubeadm
      • pod-network-cidr
    • 3.1 calico
      • pod-network-cidr
  • 4. 成功

0. 技术选型( 🔔 重要!)

0.0 version

组件version
docker-ce19.03.8
docker-ce-cli19.03.8
container.io1.3.9
kubelet1.20.9
kubeadm1.20.9
kubectl1.20.9
calicov3.20.6

0.1 云服务器

规格:

  • 一台 master 2core 4G
  • 两台 slave 4core 8G

操作系统发行版:

  • CentOS 7.8

网络:

(注意本教程所选的 vpc 网段不是 192.168.xx.xx)

ecshostnameprivate IP
mastercluster-endpoint172.31.0.2
slave0cluster-slave0172.31.0.3
slave1cluster-slave1172.31.0.4

1. 容器运行时

我们选择 docker 。

随便选个空目录,新建脚本文件 docker.sh。内容如下:

#!/bin/bash# ============================== 先安装 ==================================
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息 用阿里云的 不然慢死
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE,指定版本
sudo yum makecache fast
sudo yum -y install docker-ce-19.03.8 docker-ce-cli-19.8 container.io-1.3.9 
# Step 4: 开启Docker服务
sudo systemctl enable docker --now# ====================== 再改配置 ======================================
cat <<EOF | sudo tee /etc/docker/daemon.json
{"registry-mirrors": ["https://xxxxxxxxx.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"],"log-driver": "json-file","log-opts": {"max-size": "100m"},"storage-driver": "overlay2"
}
EOF# 使上述配置生效
systemctl daemon-reload
systemctl restart docker

建好后,

# 添加可执行权限
chmod +x docker-install.sh
# 然后执行
./install-docker.sh

解释说明:

上面脚本文件的第二部分“===再安装===”是为了创建 /etc/docker/daemon.json 配置文件。

2. k8s 安装前准备

请参考 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 的 《Before you begin》

2.0 网络连接

请你确保3台服务器加入同一vpc, 网段为 172.31.0.0/16 ,设置内网网络互信

(这里有个小坑,后面讲)

2.1 hostname

设 hostname 用命令 hostnamectl set-hostname xxx. 按照上面 1.0 章节的表设置。

2.2 其他配置

#!/bin/bash# 域名解析
echo "你的master内网ip cluster-enpoint" >> /etc/hosts# 暂时关防火墙
systemctl stop firewalld
# 然后永久关
systemctl disable firewalld# 暂时禁用交换分区
sudo swapoff -a
# 永久禁用交换分区. 不同发行版这个配置文件位置可能不同,可根据自己情况修改
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab# 允许 iptables 检查桥接流量。(把一些 ipv6 的流量桥接到 ipv4 方便统计)
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
# 设置 bridge
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
EOF# 让上面配置生效
sudo sysctl --system# 暂时关selinux
sudo setenforce 0
# 永久关selinux
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

加权限,执行。日志大概长这样:

没有报错就是执行成功!

3 安装 k8s

k8s 集群的主流安装方式有三种,我们选用最常见的 kubeadm 方式。

  • minikube 单机版的本地 kube
  • 二进制安装
  • kubeadm 等安装工具

3.0 kubeadm

这是一个引导安装工具。有点像 windows 里我们的安装向导程序 xx-setup.exexx-setup.msi


下面我们执行下面这个脚本文件 kubeadm.sh

注意,

#!/bin/bash# 添加阿里的 yum 源服务器
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-\$basearch
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
EOFyum clean all && yum makecache# 开始下载!!
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
# 安好了 查看版本
kubeadm version
# kubelet 开机自启
systemctl enable kubelet --now# ======================= slave 节点不需要下面 ====================# 害怕init master 卡住,于是提前下 images 的一段脚本。master 需要以下这些组件。这里我用了b站尚硅谷教程里的 image-repository,感谢尚硅谷啊
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
EOFchmod +x ./images.sh && ./images.sh# 初始化 master 节点. 这里我用了b站尚硅谷教程里的 image-repository
kubeadm init \
--apiserver-advertise-address=你的master内网IP \
--control-plane-endpoint=cluster-master \
--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# start using your cluster
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

pod-network-cidr

如果你的云服务器 vpc 没用我推荐的网段,,大部分人估计是 192.168.xx.xx,那会和上面 init master 的 pod-network-cidr 冲突。

如果你是这种情况,复制脚本文件时改下这个字段,改成任意一个避开你自己 vpc 的网段即可,比如改成 ‘172.31.0.0/16’…

详情参见 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network

成功:

如果你为了保护钱包没按开头规定买服务器,选了低规格的云服务器,就会出现这个。。

# 如果你是 root 用户,成功后执行下这个
export KUBECONFIG=/etc/kubernetes/admin.conf

3.1 calico

选一个 pod network 插件下载。这里我们选 calico。

按照官网的版本匹配关系,我们该安指定版本v3.20.6。可能阿里云觉得它比较小众,所以阿里云加速器里存的 calico 并不全。想 pull 指定 tag 是走不了加速器的,最终还是会去 dockerHub pull。除非运气爆棚,否则就是失败,失败,再失败。。

本教程中我的解决方式是曲线救国。由于我的 windows 笔记本是有 VPN 的,可以从 calico 的 github 飞速地下载 image 们的 tar 包们。Release v3.20.6 · projectcalico/calico (github.com)。下完传到云服务器上。然后加载(docker load) tar 包形成 image。

release-v3.20.6.tgz同目录新建 calico.sh

# !/bin/bash# 解压
tar -zxvf release-v3.20.6.tgzcd release-v3.20.6
cd images# 循环加载 image
sudo tee load-images.sh <<-'EOF'
#!/bin/bash
tars=(
calico-kube-controllers.tar
calico-node.tar
calico-typha.tar
calico-cni.tar
calico-pod2daemon-flexvol.tar
)
for tar in ${tars[@]} ; do
docker load < $tar
done
EOFchmod +x load-images.sh && ./load-images.sh# 替换 docker.io 前缀
cp ../k8s-manifests/calico.yaml ../k8s-manifests/calico.cp.yaml
sed -i 's/image: docker.io\//image: /g' calico.yaml# 如果你的 VPC 网段和 pod-network 不冲突,那么可以解开下面注释
# kubectl apply -f ../k8s-manifests/calico.yaml

pod-network-cidr

关于最后一行脚本——

再一次,如果你的云服务器 vpc 没用我推荐的网段,,,大部分人估计是 192.168.xx.xx,那会和上面 calico 默认的 Ipv4pool_cidr 冲突。

修改 calico.yaml 文件,解注释,改网段:

🔔 和章节 4.1 中你 init master 用的 pod-network-cidr 的地址保持一致!!

然后可以编排资源了:

kubectl apply -f calico.yaml

4. 成功

# 检查下 k8s 集群的 pod 们
kubectl get pod -A

如果你的哪个 pod 有问题,可以用 describe 排查:

kubectl describe pod [POD_NAME] -n [NAMESPACE]

全都成功的话长这样:

使用本教程遇到坑的话欢迎留言探讨~

本文链接:https://my.lmcjl.com/post/11099.html

展开阅读全文

4 评论

留下您的评论.