搭建 K8S 集群[无需科学上网]
GitHub
:github.com/kubernetes/…
1、环境准备
1.1、版本统一
Docker 20.10.16
---
kubeadm-1.20.15
kubelet-1.20.15
kubectl-1.20.15
---
k8s.gcr.io/kube-apiserver:v1.20.15
k8s.gcr.io/kube-controller-manager:v1.20.15
k8s.gcr.io/kube-scheduler:v1.20.15
k8s.gcr.io/kube-proxy:v1.20.15
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
---
calico:v3.9
复制代码
1.2、准备 3 台 centos 服务器或者虚拟机
大家根据自己的情况来准备 centos7 的虚拟机。
要保证彼此之间能够 ping 通,也就是处于同一个网络中,虚拟机的配置要求不低于 2C4G
, 2C2G
也能跑但是可能说内存比较紧张。
1.3、更新并安装依赖
3台机器都需要执行,CV 大法就行,没有知识点。
yum -y update
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
复制代码
1.4、安装Docker
每一台机器都需要进行安装,按照也比较简单。
-
安装必要的依赖
sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 复制代码
-
设置仓库源,这里使用的是阿里云的仓库
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 复制代码
-
设置阿里云镜像加速器
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://st16o6r9.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload 复制代码
-
安装并启动 docker
yum install -y docker-20.10.16 docker-ce-cli-20.10.16 containerd.io sudo systemctl start docker && sudo systemctl enable docker 复制代码
1.5、修改 hosts 文件
-
master 节点
sudo hostnamectl set-hostname master vi /etc/hosts 192.168.1.207 master 192.168.1.241 node-1 192.168.1.97 node-2 复制代码
-
两个 worker
sudo hostnamectl set-hostname node-1 sudo hostnamectl set-hostname node-2 vi /etc/hosts 192.168.1.207 master 192.168.1.241 node-1 192.168.1.97 node-2 复制代码
-
使用 ping 测试一下是否节点之间网络联通
ping node-1 ping node-2 复制代码
1.6、系统基础配置
-
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld 复制代码
-
关闭 selinux
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 复制代码
-
关闭 swap
swapoff -a sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab 复制代码
-
配置 iptables 的 ACCEPT 规则
iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT 复制代码
-
设置系统参数
cat <<EOF > /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system 复制代码
2、安装操作组件
-
配置yum源
cat <<EOF > /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 复制代码
-
安装 kubeadm & kubelet & kubectl
yum install -y kubeadm-1.20.15 kubelet-1.20.15 kubectl-1.20.15 复制代码
-
docker 和 k8s 设置同一个 cgroup
# 首先需要往之前创建的 docker/daemon.json 文件中追加写入 "exec-opts": ["native.cgroupdriver=systemd"] 属性值 # 然后进行重启 systemctl restart docker systemctl enable kubelet && systemctl start kubelet 复制代码
3、下载需要镜像
-
查看kubeadm使用的镜像
kubeadm config images list
可以发现打印出来的进行地址都是国外的,在国内进行直接拉取访问的话可能会遇见下载较慢、连接超时的问题,因此可以先将需要的镜像通过阿里云仓库进行加载。
-
解决国外镜像不能访问的问题
创建kubeadm.sh脚本,用于拉取所需镜像。
#!/bin/bash set -e KUBE_VERSION=v1.20.15 KUBE_PAUSE_VERSION=3.2 ETCD_VERSION=3.4.13-0 CORE_DNS_VERSION=1.7.0 GCR_URL=k8s.gcr.io ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers images=(kube-proxy:${KUBE_VERSION} kube-scheduler:${KUBE_VERSION} kube-controller-manager:${KUBE_VERSION} kube-apiserver:${KUBE_VERSION} pause:${KUBE_PAUSE_VERSION} etcd:${ETCD_VERSION} coredns:${CORE_DNS_VERSION}) for imageName in ${images[@]} ; do docker pull $ALIYUN_URL/$imageName docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName docker rmi $ALIYUN_URL/$imageName done 复制代码
-
运行脚本和查看镜像
# 运行脚本 sh ./kubeadm.sh # 查看镜像 docker images 复制代码
3、创建集群
3.1、初始化 master
注意
:此操作是在主节点上进行
kubeadm init --kubernetes-version=1.20.15 --apiserver-advertise-address=192.168.1.107 --pod-network-cidr=10.244.0.0/16
【若要重新初始化集群状态:kubeadm reset, 然后再进行上述操作, 注意这里的地址不能填公网地址, 不然重置不了】
复制代码
- 初始化完成之后会打印很多的日志,其中需要将
join
的那条日志进行保存,因为需要在node
节点中使用从而使从节点加入到集群当中。
3.2、根据日志提示
按照日子提示的内容将令牌这些生成信息进行保存替换,如果操作 controller
的环境和集群不在同一个环境中还需要将数据拷贝到对应的开发环境中使用。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
复制代码
此时kubectl cluster-info查看一下是否成功
3.3、健康检查
curl -k https://localhost:6443/healthz
# 没有问题的话会返回一个 ok
复制代码
3.4、部署 calico 网络插件
选择网络插件:kubernetes.io/docs/concep…
-
calico,同样在master节点上操作
kubectl apply -f https://docs.projectcalico.org/v3.9/manifests/calico.yaml 复制代码
4、子节点加入集群
这里需要使用初始化集群成功后的日志信息【注意这边大家要自己的,下面我的只是一个参考】
kubeadm join 192.168.1.207:6443 --token yu1ak0.2dcecvmpozsy8loh \
--discovery-token-ca-cert-hash sha256:5c4a69b3bb05b81b675db5559b0e4d7972f1d0a61195f217161522f464c307b0
复制代码
- 在 node-1 和 node-2 上执行上述命令,在master节点上检查集群信息
kubectl get nodes NAME STATUS ROLES AGE VERSION master-kubeadm-k8s Ready master 19m v1.14.0 worker01-kubeadm-k8s Ready <none> 3m6s v1.14.0 worker02-kubeadm-k8s Ready <none> 2m41s v1.14.0 复制代码