使用 kubeadm 搭建 Kubernetes 集群

minikube 也是使用 kubeadm

  • 安装软件 kubelete、kubeadm、kubectl
    • 都将是以容器的方式运行在 Docker 中
  • 初始化集群
  • 添加 node 到集群中
  • 证书自动生成
  • 集群管理系统是以容器方式存在,容器运行在 Master
  • 容器镜像是谷歌提供,科学上网
    • 阿里云下载容器镜像,需要重新打标记

主机要求

三台机器,一台 master,2台 worker
Centos7、2 cpu、 2G 内存

主机准备

操作系统安装,centos 最小化安装,硬盘分区(/boot、/)

设置 hostname

hostnamectl set-hostname master
hostnamectl set-hostname worker1
hostnamectl set-hostname worker2

配置 IP /etc/hosts

192.168.0.130 master
192.168.0.122 worker1
192.168.0.123 worker2

关闭 firewalld

systemctl stop firewalld
systemctl disable firewalld

<!--确认是否运行-->
firewall-cmd --state

SELINUX

 cat /etc/selinux/config


sed -ri 's/SELINUX=enforcing/SELINUX=disable/' /etc/selinux/config

时间同步

yum install ntpdate
ntpdate time1.aliyun.com

crontab -e 
0 */1 * * * ntpdate time1.aliyun.com

关闭 swap 分区

vim /etc/fstab

Swap 前加 # 注释掉

free -m 查看有 swap 分区
reboot
重启之后没有

配置网桥过滤功能

touch /etc/sysctl.d/k8s.conf
添加以下内容

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0

加载过滤模块 br_netfilter

modprobe br_netfilter

查看是否
lsmod | grep br_netfilter

加载网桥过滤配置文件

sysctl -p /etc/sysctl.d/k8s.conf

开启 ipvs

service 需要使用到 iptable 或者 ipvs
ipvs 比 iptables 转化效率高。

安装 ipset、ipvsadm

yum -y install ipset ipvsadm

在所有节点执行

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

检查是否加载

lsmod | grep -e ipvs -e nf_conntrack_ipv4

安装 docker

centos 安装 docker 脚本

curl -sSL https://get.daocloud.io/docker | sh

安装 kubeadm、kubectl、kubelet

需要在每台机器上安装以下的软件包:

kubeadm:用来初始化集群的指令。

kubelet:在集群中的每个节点上用来启动 Pod 和容器等。

kubectl:用来与集群通信的命令行工具。

新建 /etc/yum.repos.d/kubernetes.repo,内容为:

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

安装

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

配置 kubelet

为了实现 docker 使用的 cgroupdriver 与 kubelet 使用的 cgroup 一致,修改如下文件内容

vim /etc/sysconfig/kubelet
添加以下内容
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

下载所需镜像

k8s.gcr.io/kube-apiserver:v1.23.5
k8s.gcr.io/kube-controller-manager:v1.23.5
k8s.gcr.io/kube-scheduler:v1.23.5
k8s.gcr.io/kube-proxy:v1.23.5
k8s.gcr.io/pause:3.6
k8s.gcr.io/etcd:3.5.1-0
k8s.gcr.io/coredns/coredns:v1.8.6

docker pull 下载所有镜像,需要科学上网。
在有科学上网的电脑上下载镜像,通过 docker save -o 、 docker load -i 将镜像复制到所有虚拟机中。

master 节点全部都要
worker 节点只要有 kube-proxy、pause 即可。

kubeadm 初始化集群

kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.0.130 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

然后成功后有以下输出内容:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.0.118:6443 --token tprabz.gefub6pvv1x2qalv \
        --discovery-token-ca-cert-hash sha256:b617b1efda2e97a3f98c624a20090c0dc711bfe2e432a31631cbe87f215c103d 

依次执行

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

这时候 kubectl get nodes 只有 master,并且还没启动,原因是缺了网络插件,可以使用 flannel 网络插件,比较简单。

Flannel is an overlay network provider that can be used with Kubernetes.

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

worker 节点中执行下面命令添加到集群中。

kubeadm join 192.168.0.118:6443 --token tprabz.gefub6pvv1x2qalv \
        --discovery-token-ca-cert-hash sha256:b617b1efda2e97a3f98c624a20090c0dc711bfe2e432a31631cbe87f215c103d 

如果忘记了 join 需要的 token,重新再 master 几点上生成一个

kubeadm token create --print-join-command

然后将输出内容,在 worker 节点上运行就行。

不出意外,集群搭建完成。

2022/3/7 posted in  kubernetes