搭建 Kubernetes 集群 —— 搭建方案 kubeadm
一、搭建方案
一)minikube
二)kubeadm
可以看到配置项
1、服务器要求
需要 3 台服务器(虚拟机)
- k8s-master:192.168.113.120
- k8s-node1:192.168.113.121
- k8s-node2:192.168.113.122
最低配置:2核、2G内存、20G硬盘
最好能联网,不能联网的话需要有提供对应镜像的私有仓库
2、软件环境
操作系统:CentOS 7
Docker:20+
k8s:1.23.6
3、安装步骤
1)初始操作
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
# 关闭swap
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 关闭完swap后,一定要重启一下虚拟机!!!
# 根据规划设置主机名
hostnamectl set-hostname k8s-master
或 hostnamectl set-hostname k8s-node1
或 hostnamectl set-hostname k8s-node2
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.52.12 k8s-master
192.168.52.13 k8s-node1
192.168.52.14 k8s-node2
EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 生效
sysctl --system
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
2)安装基础软件(所有节点)
-
安装 Docker
yum update -y yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # (如果报错:yum -y install yum-utils) yum -y install docker-ce systemctl start docker systemctl enable docker docker run hello-world
-
添加阿里云 yum 源
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
-
安装 kubeadm、kubelet、kubectl
kubeadm:用于初始化和管理 Kubernetes 集群,它可以协助您在主节点和工作节点上部署 Kubernetes 控制平面组件,并生成加入节点的令牌。
kubelet 一旦集群初始化完成,kubelet 运行在每个工作节点上,它接收来自 kubectl 或其他 Kubernetes 控制平面组件的指令,并确保节点上的容器按照规范运行。
kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群进行交互。允许开发人员执行各种操作,如创建、管理、调试和监控容器、Pod、服务、配置、存储等。yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6 systemctl enable kubelet kubelet --version # 配置关闭 Docker 的 cgroups,修改 vi /etc/docker/daemon.json,加入以下内容 {"exec-opts": ["native.cgroupdriver=systemd"]} # 重启 docker systemctl daemon-reload systemctl restart docker systemctl restart kubelet # 查看docker驱动 docker info | grep Driver
3)部署 Kubernetes Master
# 在 Master 节点下执行
kubeadm init \
--apiserver-advertise-address=192.168.52.12 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
# 安装成功后,复制如下配置并执行
mkdir -p $HOME/.kube
# <font color="red">**复制用户认证信息**</font>
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查询pod实例(目前为空)
kubectl get po
# 查询节点信息(目前只有一条NotReady)
kubectl get nodes
4)加入 Kubernetes Node
分别在 k8s-node1 和 k8s-node2 执行
# 下方命令可以在 k8s master 控制台初始化成功后复制 join 命令
kubeadm join 192.168.52.12:6443 --token ye0jj6.o167p2j6w6iswakc --discovery-token-ca-cert-hash sha256:4cedeb6fe5fabca6a3446071627c84e11250223196662f707af11cc1cc2c6174
# (注意)
# 1. 如果初始化的 token 不小心清空了,可以通过如下命令获取或者重新申请
# 如果 token 已经过期,就重新申请
kubeadm token create
# token 没有过期可以通过如下命令获取
kubeadm token list
# 2. 获取 --discovery-token-ca-cert-hash 值,得到值后需要在前面拼接上 sha256:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
# 3. <font color="red">如果加入失败(可能是令牌失效等问题)</font>
则在master节点上执行 kubeadm token create --print-join-command 用来重新生成令牌,然后再在node节点上执行
kubeadm join 192.168.52.12:6443 --token hpifm2.vmykiv1angcbppey --discovery-token-ca-cert-hash sha256:a9e9de7f36cde303f930ec7ec546e888b5e2fca957b4b60f6b05954cb2195c13
5)部署 CNI 网络插件
# 在 master 节点上执行
# 下载 calico 配置文件,可能会网络超时
curl https://docs.projectcalico.org/manifests/calico.yaml -O
# 1. 修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改为与初始化的 cidr 相同
# 2. 修改 IP_AUTODETECTION_METHOD 下的网卡名称
# 3. 找到 calico 下面所有需要下载的镜像
grep image calico.yaml
# 4. 删除镜像 docker.io/ 前缀,避免下载过慢导致失败
sed -i 's#docker.io/##g' calico.yaml
# 5. 直接进行构建操作
kubectl apply -f calico.yaml
# 观察calico的pods 目前是0/1状态,稍等几分钟
kubectl get pods -n kube-system
# 查看calico的详情
kubectl describe po calico-kube-controllers-cd8566cf-xnw48 -n kube-system
稍等几分钟
- master和node1和node2就是Ready状态了
- pods中 calico也都是Ready状态
安装完成
6)测试 kubernetes 集群
# 创建部署,创建一个 deployment,用它创建一个镜像叫 nginx
kubectl create deployment nginx --image=nginx
# 暴露端口,创建一个 service,为nginx创建 service,并暴露容器内的端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看 pod 以及服务信息
kubectl get pod,svc
# 访问nginx(192.168.52.12,192.168.52.13,192.168.52.14均可访问)
curl 192.168.52.12:30112
7)其它命令
# 重启docker
systemctl daemon-reload
systemctl restart docker
# 重启kubelet
systemctl restart kubelet
# kubelet状态
systemctl status kubelet
# kubelet日志信息
journalctl -xeu kubelet
# 停止和清理之前的 Kubernetes 控制平面组件,执行完毕后,就可以重新kubeadm init初始化集群
kubeadm reset
sudo rm -rf /etc/cni/net.d
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
sudo iptables -X
sudo ipvsadm --clear
rm $HOME/.kube/config
# 获取组件状态
kubectl get componentstatus
# 获取 nodes
kubectl get nodes
# 获取 pod(-n 为命名空间)
kubectl get pods
kubectl get pods -n kube-system
# 查看calico的详情
kubectl describe po calico-kube-controllers-cd8566cf-xnw48 -n kube-system
三)二进制安装
报错看不到
四)命令行工具
一键就完成了