一、环境说明 1、简介 本文使用 CentOS 7.9 系统采用 1 个 master 加 2 个 node 的方式部署 k8s 1.27版本。仅作学习使用,不建议用于生产环境。
2、配置
节点
IP 地址
操作系统
配置
k8s-master
192.168.13.210
CentOS 7.9
2 核 2G 40G
k8s-node1
192.168.13.211
CentOS 7.9
2 核 2G 40G
k8s-node2
192.168.13.212
CentOS 7.9
2 核 2G 40G
二、集群搭建 1、主机名配置 k8s-master 节点主机名配置
1 hostnamectl set-hostname k8s-master --static
k8s-node1 节点主机名配置
1 hostnamectl set-hostname k8s-node1 --static
k8s-node2 节点主机名配置
1 hostnamectl set-hostname k8s-node2 --static
2、hosts 配置 配置本地域名解析,在三台节点都执行以下命令:
1 2 3 4 5 cat >>/etc/hosts <<EOF 192.168.13.210 k8s-master 192.168.13.211 k8s-node2 192.168.13.212 k8s-node1 EOF
3、防火墙配置 禁用防火墙,在三台节点都执行以下命令:
1 2 3 4 systemctl stop firewalld.service systemctl disable firewalld.service
4、SELinux 配置 禁用 SELinux(安全增强的 Linux 内核模块),在三台节点都执行以下命令:
1 2 3 4 setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
5、关闭 swap 分区 关闭 swap 交换分区,在三台节点都执行以下命令:
1 2 3 4 swapoff -a sed -i '/swap/s/^/#/g' /etc/fstab
6、修改内核参数 修改内核参数,在三台节点都执行以下命令:
1 2 3 4 5 6 7 8 9 cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system
这些参数的含义如下:
net.bridge.bridge-nf-call-ip6tables = 1
:启用 IPv6 数据包的网络地址转换(NAT)功能。
net.bridge.bridge-nf-call-iptables = 1
:启用 IPv4 数据包的网络地址转换(NAT)功能。
net.ipv4.ip_forward = 1
:启用 IP 转发功能,允许将网络流量从一个网络接口转发到另一个网络接口。
7、安装依赖 安装基础依赖,在三台节点都执行以下命令:
1 yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git yum-utils device-mapper-persistent-data lvm2 psmisc net-tools
8、加载IPVS内核模块 加载 IPVS 内核模块,在三台节点都执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 cat > /etc/modules-load.d/ipvs.conf <<EOF ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack nf_conntrack_ipv4 EOF systemctl enable --now systemd-modules-load.service lsmod |egrep "ip_vs|nf_conntrack_ipv4"
9、加载 overlay 模块和 br_netfilter 模块 加载 overlay 内核模块和 br_netfilter 内核模块,在三台节点都执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 12 cat >>/etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF modprobe overlay modprobe br_netfilter lsmod | egrep 'overlay|br_netfilter'
10、安装容器环境 安装容器环境,可以使用 cri-docker 或 containerd.io ,这里安装安装 docker,在三台节点都执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y cat > /etc/docker/daemon.json << EOF { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": [ "https://dockerproxy.com", "https://hub-mirror.c.163.com", "https://mirror.baidubce.com", "https://ccr.ccs.tencentyun.com" ] } EOF systemctl daemon-reload systemctl start docker systemctl enable docker
11、安装 cri-dockerd 在 Mirantis/cri-dockerd (github.com) 下载最新版rpm包
1 2 3 4 5 6 wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4-3.el7.x86_64.rpm systemctl daemon-reload && systemctl enable cri-docker.socket systemctl start cri-docker.socket cri-docker
12、安装 kubelet kubeadm kubectl
kubelet kubeadm kubectl 介绍
kubeadm :官方社区推出的一个用于快速部署 kubernetes 集群的工具。
kubectl :Kubernetes 集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能够在集群上进行容器化应用的安装和部署。
kubelet :运行在所有节点上,用来启动 Pod 和容器等。
安装 kubelet kubeadm kubectl,在三台节点都执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 cat <<EOF > /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 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 makecache yum list kubelet --showduplicates yum -y install kubectl-1.27.1 kubelet-1.27.1 kubeadm-1.27.1 yum install -y kubelet kubeadm kubectl cat > /etc/sysconfig/kubelet << EOF KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" EOF 启动并开机自启动 kubelet systemctl enable kubelet systemctl start kubelet
三、集群搭建 1、初始化集群 在 k8s-master 节点初始化集群,参数如下:
1 2 3 4 5 6 7 8 kubeadm init --kubernetes-version=1.27.3 \ --apiserver-advertise-address=192.168.13.210 \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=172.16.0.0/16 --service-cidr=10.96.0.0/12 \ --ignore-preflight-errors=all \ --cri-socket unix:///var/run/cri-dockerd.sock
--kubernetes-version
: 用于指定 kubernetes 版本号。
--apiserver-advertise-address
: 用于指定 Master 节点 IP 地址。
--image-repository
: 由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过—image-repository指定阿里云镜像仓库地址。
--pod-network-cidr
: 指定 pod的网段,网段可以自定义,不冲突即可。
--service-cidr=10.96.0.0/12
: 指定服务网络的 CIDR。这个 CIDR 范围将用于分配给 Kubernetes 服务的 IP 地址。
--ignore-preflight-errors=all
: 忽略预检错误。这个选项将忽略在运行 kubeadm init
前的预检过程中出现的所有错误。
--cri-socket unix:///var/run/cri-dockerd.sock
: 指定容器运行时的套接字文件路径。这里表示使用 Docker 作为容器运行时。
初始化成功后,会出现以下信息,接下来按照以下信息操作即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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.13.210:6443 --token thurv8.47648ymwn035lymx \ --discovery-token-ca-cert-hash sha256:9fed63c05d4f8fb503f00efef5179d444465fd208ccd48a7b803ee3c414f48fc
2、初始化配置 在 k8s-master 节点根据不同用户配置集群,普通用户配置如下:
1 2 3 mkdir -p $HOME /.kubesudo cp -i /etc/kubernetes/admin.conf $HOME /.kube/config sudo chown $(id -u):$(id -g) $HOME /.kube/config
root 用户配置如下:
1 export KUBECONFIG=/etc/kubernetes/admin.conf
3、网络配置 - flannel 配置集群网络,在 k8s-master 节点配置网络,这里使用的网络组件为 flannel 。
1 kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4、node节点加入集群 在 2 个 k8s-node 节点分别加入集群操作,加入集群命令在第一步初始化集群生成。如果需要cri-socket添加 --cri-socket unix:///var/run/cri-dockerd.sock
1 2 kubeadm join 192.168.13.210:6443 --token thurv8.47648ymwn035lymx \ --discovery-token-ca-cert-hash sha256:9fed63c05d4f8fb503f00efef5179d444465fd208ccd48a7b803ee3c414f48fc
加入成功后会出现以下信息
1 2 3 This node has joined the cluster: * Certificate signing request was sent to apiserver and a response was received. * The Kubelet was informed of the new secure connection details.
如果初始化的 token 不小心清空了,可以通过如下命令获取或者重新申请
1 2 3 4 5 6 7 8 9 kubeadm token create kubeadm token list openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
5、验证集群状态 在 k8s-master 节点,查看所有节点信息进行验证
三个节点 STATUS 为 Ready,说明集群搭建成功,这个过程略慢。
6、配置 tab 补全命令(可选) 安装bash-completion
1 yum install bash-completion -y
执行bash_completion
1 source /usr/share/bash-completion/bash_completion
配置开机加载
1 2 3 4 5 6 cat >> .bashrc << EOF source <(kubectl completion bash) source <(kubeadm completion bash) EOF source .bashrc
到此就可以用 tab
键补全 kubectl
和 kubeadm
命令了。