kubernetes/kubernetes-集群.md
2025-04-22 20:23:40 +08:00

7.5 KiB
Raw Permalink Blame History

Kubernetes 集群


部署kubernetes 集群

1. 前置知识点

目前生产部署Kubernetes集群主要有两种方式:

  • kubeadm

    Kubeadm是一个K8s部署工具,提供kubeadm initkubeadm join,用于快速部署Kubernetes集群。

    官方地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/

  • 二进制包

    github下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。

    Kubeadm降低部署门槛,但屏蔽了很多细节,遇到问题很难排查。如果想更容易可控,推荐使用二进制包部署Kubernetes集群,虽然手动部署麻烦点,期间可以学习很多工作原理,也利于后期维护。

2. kubeadm 部署方式介绍

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署:

  • 创建一个Master节点kubeadm init
  • Node节点加入到当前集群中$ kubeadm join <Master节点的IP 和端口>

3. 安装要求

在开始之前,部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM2 个CPU或更多CPU硬盘30GB 或更多
  • 集群中所有机器之间网络互通
  • 可以访问外网,需要拉取镜像
  • 禁止swap分区

4. 最终目标

  • 在所有节点上安装Dockerkubeadm
  • 部署Kubernetes Master
  • 部署容器网络插件
  • 部署Kubernetes Node,将节点加入Kubernetes集群中
  • 部署Dashboard Web页面,可视化查看Kubernetes资源

5. 准备环境

节点 IP地址 组件
master 192.168.159.130 dockerkubectlkubeadmkubelet
node1 192.168.159.131 dockerkubectlkubeadmkubelet
node2 192.168.159.132 dockerkubectlkubeadmkubelet

6. 环境初始化

主机名解析

[root@master ~]# vim /etc/hosts
192.168.159.130 master
192.168.159.131 node1
192.168.159.132 node2

注意:
	所有节点

禁用iptablefirewalld

[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld

[root@master ~]# systemctl stop iptables
[root@master ~]# systemctl disable iptables

注意:
	所有节点

禁止selinux

[root@master ~]# setenforce 0
[root@master ~]# vim /etc/selinux/config
SELINUX=disabled

注意:
	所有节点

禁用swap分区

[root@master ~]# swapoff -a
[root@master ~]# sed -i 's/.*swap.*/#&/' /etc/fstab

注意:
	所有节点

加载内核模块

[root@master ~]# modprobe br_netfilter

[root@master ~]# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
net.ipv4.ip_forward = 1

注意:
	所有节点

7. 安装docker

[root@master ~]# yum install -y yum-utils
[root@master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@master ~]# yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

[root@master ~]# systemctl start docker
[root@master ~]# systemctl enable docker

注意:
	所有节点

8. 安装kubeadm kubelet kubectl

配置yum仓库

[root@master ~]# vim /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

注意:
	所有节点

安装

[root@master ~]# yum -y install kubeadm-1.23.5  kubelet-1.23.5  kubectl-1.23.5 ipvsadm

注意:
	所有节点

配置kubeletcgroups

[root@master ~]# vim /etc/sysconfig/kubelet

KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"

注意:
	所有节点

9. 部署镜像

下载镜像

[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/coredns-v1.8.6.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/etcd-3.5.1-0.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/flannel-cni.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/flannel-v0.14.0-amd64.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/flannel.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-apiserver-v1.23.5.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-controller-manager-v1.23.5.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-proxy-v1.23.5.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-scheduler-v1.23.5.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/pause-3.6.tar
[root@master ~]# wget http://182.92.143.66:40072/directlink/img/kube_images/kube-flannel-2402.yml

注意:
	所有节点

镜像导入

[root@master ~]# vim image_load.sh
#!/bin/bash
image_path=`pwd`
for i in `ls "${image_path}"`; do
	docker load < $i
done

[root@master ~]# bash image_load.sh
注意:
	所有节点

10. master节点初始化

[root@master ~]# kubeadm init --kubernetes-version=1.23.5 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.159.130

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.159.130:6443 --token vxpoqx.jfxg9ae302d2e1j9 \
	--discovery-token-ca-cert-hash sha256:3b77859462fbcdc312a158e02c77e60e28d41440801fed3cdee1556029a8547a


[root@master ~]# mkdir -p $HOME/.kube
[root@master ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@master ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@master ~]# export KUBECONFIG=/etc/kubernetes/admin.conf
[root@master ~]# kubectl apply -f kube-flannel-2402.yml

11. 将node加入工作节点

[root@node1/2/3 ~]# kubeadm join 192.168.159.130:6443 --token vxpoqx.jfxg9ae302d2e1j9 --discovery-token-ca-cert-hash sha256:3b77859462fbcdc312a158e02c77e60e28d41440801fed3cdee1556029a8547a

12. master节点查看集群状态

[root@master ~]# kubectl get nodes
NAME     STATUS   ROLES                  AGE     VERSION
master   Ready    control-plane,master   3m11s   v1.23.5
node1    Ready    <none>                 27s     v1.23.5
node2    Ready    <none>                 43s     v1.23.5