k8s--集群搭建,使用 kubeadm 搭建 1.23.5 的集群

前戏

我有三台服务器,一台为 master,其他两台为 Node 节点。

搭建

给三台主机分别设置 hostname,后面会根据 hostname 来生成名称

# 每个节点分别设置对应主机名
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2

所有节点都修改 hosts

# 所有节点都修改 hosts
vim /etc/hosts
172.16.32.2 node1
172.16.32.6 node2
172.16.0.4 master

注意:主机名可以填写内网的,后面的为别名

修改完成之后,去 ping 一下,master ping node1/node2

以及 node1 ping master/node2,node2 ping master/node1,如果都可以 ping 成功,则 host 配置的没问题

# 所有节点关闭 SELinux
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

# 所有节点确保防火墙关闭
systemctl stop firewalld
systemctl disable firewalld

关闭交换内存

swapoff -a

# 编辑下面的文件,注释掉包含单词 swap 的所有行
vim /etc/fstab

添加 k8s 安装源

# 添加 k8s 安装源,所有主机都要安装
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装 yum-utils
yum install -y yum-utils
# 添加 Docker 安装源,所有主机都要安装
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 kubelet、kubeadm 等

# 安装所需组件(所有节点),安装指定版本的。我这里安装的是 1.23.5
yum install -y kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5 docker-ce


# 由于官网未开放同步方式, 可能会有索引gpg检查失败的情况,这时请用如下命令安装(如果上面命令安装失败的话在使用下面的命令,成功的话就不需要执行下面的命令)
yum install -y  --nogpgcheck kubelet-1.23.5 kubeadm-1.23.5 kubectl-1.23.5 docker-ce

启动 kubelet、docker,并设置开机启动(所有节点)

# 所有节点
systemctl enable kubelet
systemctl start kubelet
systemctl enable docker
systemctl start docker

修改 docker 配置(所有节点)

# kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了
cat <<EOF > daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"]
}
EOF
mv daemon.json /etc/docker/

重启生效

# 重启生效,所有节点
systemctl daemon-reload
systemctl restart docker

用 kubeadm 初始化集群(仅在主节点跑)

只在主节点跑,跑完之后将红框里的保存下来

# 初始化集群控制台 Control plane
# 失败了可以用 kubeadm reset 重置
# 指定安装的版本,--apiserver-advertise-address 为你宿主机的 ip 地址
kubeadm init --apiserver-advertise-address=10.6.215.30 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.5 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

忘记了重新获取:kubeadm token create --print-join-command
# 复制授权文件,以便 kubectl 可以有权限访问集群
# 如果你其他节点需要访问集群,需要从主节点复制这个文件过去其他节点
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

把工作节点加入集群(只在工作节点跑)

这时候如果在主节点上执行 kubectl get node 是没有子节点的,如下

把上面保存下来的数据在所有 node 节点上执行

在去执行下面命令就可以看到,多了两个节点 node1、node2

kubectl get node

从上图可以看出,有一个 master节点,两个 node 节点,但是他们的状态是 NotReady 的,这时需要安装网络插件,否则 node 是 NotReady 状态(主节点跑)

安装网络插件 flannel,只在主节点安装

# 很有可能国内网络访问不到这个资源,你可以网上找找国内的源安装 flannel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

查看节点,要在主节点查看(执行完等会在查看)

安装 calico 网络插件

1.在 master 上下载配置 calico 网络的 yaml

# 注意,你的 k8s 和 calico 版本可能不对应,如果执行 kubectl apply -f calico.yaml 的时候报错,则要重新找对应的 calico 版本
[root@master1 ~]# wget https://docs.projectcalico.org/v3.20/manifests/calico.yaml --no-check-certificate

2.修改 calico.yaml 里的 pod 网段。

搜索 192,大概在 676 行左右,如下

把两个 # 及 # 后面的空格去掉,并把 192.168.0.0/16 改成 10.244.0.0/16

# 这里的 10.244.0.0/16 是你 kubuadm init 时 --pod-network-cidr 的值,这里是 10.244.0.0/16
kubeadm init --apiserver-advertise-address=10.6.215.30 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.23.5 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16

改完后的如下

3.提前下载所需要的镜像。

# 查看此文件用哪些镜像:
[root@master1 ~]# grep image calico.yaml
          image: docker.io/calico/cni:v3.20.5
          image: docker.io/calico/cni:v3.20.5
          image: docker.io/calico/pod2daemon-flexvol:v3.20.5
          image: docker.io/calico/node:v3.20.5
          image: docker.io/calico/kube-controllers:v3.20.5

在所有节点(包括master)上把这些镜像下载下来:

# 注意,你的版本可能和我的不一样
for i in calico/cni:v3.20.5 calico/pod2daemon-flexvol:v3.20.5 calico/node:v3.20.5 calico/kube-controllers:v3.20.5 ; do docker pull $i ; done

4.安装 calico 网络 

在 master 上执行如下命令:

[root@master1 ~]# kubectl apply -f calico.yaml
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
serviceaccount/calico-node created
deployment.apps/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
Warning: policy/v1beta1 PodDisruptionBudget is deprecated in v1.21+, unavailable in v1.25+; use policy/v1 PodDisruptionBudget
poddisruptionbudget.policy/calico-kube-controllers created

5:验证结果。
再次在 master 上运行命令  kubectl get node 查看运行结果

[root@master1 ~]# kubectl get nodes
NAME      STATUS   ROLES                  AGE   VERSION
master1   Ready    control-plane,master   34m   v1.23.5
node1     Ready    <none>                 20m   v1.23.5
node2     Ready    <none>                 20m   v1.23.5

6.测试 k8s 集群

[root@master1 ~]# kubectl create deployment nginx --image=nginx
deployment.apps/nginx created

# 可以看到我们的 pod 都运行了
[root@master1 ~]# kubectl get deploy,pod
NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx   1/1     1            1           47s

NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-85b98978db-l75b5   1/1     Running   0          47s

 

posted @ 2022-04-16 15:46  邹邹很busy。  阅读(547)  评论(0编辑  收藏  举报