Kubernetes集群的安装
安装方式介绍
- minikube
只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起 - 直接用云平台 Kubernetes
可视化搭建,只需简单几步就可以创建好一个集群。
优点:安装简单,生态齐全,负载均衡器、存储等都给你配套好,简单操作就搞定 - 裸机安装(Bare Metal)
至少需要两台机器(主节点、工作节点个一台),需要自己安装 Kubernetes 组件,配置会稍微麻烦点。
可以到各云厂商按时租用服务器,费用低,用完就销毁。
缺点:配置麻烦,缺少生态支持,例如负载均衡器、云存储。
minikube
安装
- 需要提前安装好 Docker
- 必须用非root用户安装
安装非常简单,支持各种平台,安装方法
本篇以Centos 7.9为例:
安装Docker
安装minikube(除了安装在root下执行,其他都在非root下执行)
1
2
3
4
5
6
7
8$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 14.9M 100 14.9M 0 0 758k 0 0:00:20 0:00:20 --:--:-- 2207k
$ sudo rpm -Uvh minikube-latest.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:minikube-1.24.0-0 ################################# [100%]
启动集群
1 | # 启动集群 |
设置环境变量别名
1 | $ alias kubectl="minikube kubectl --" |
查看节点
1 | # 查看节点。kubectl 是一个用来跟 K8S 集群进行交互的命令行工具 |
安装集群可视化(可选)
1 | $ minikube dashboard |
停止集群
1 | $ minikube stop |
清空集群
1 | $ minikube delete --all |
云平台搭建
裸机搭建(Bare Metal)
主节点需要组件
- docker(也可以是其他容器运行时)
- kubectl 集群命令行交互工具
- kubeadm 集群初始化工具
- kubelet 管理 Pod 和容器,确保他们健康稳定运行。
工作节点需要组件 文档
- docker(也可以是其他容器运行时)
- kubelet 管理 Pod 和容器,确保他们健康稳定运行
- kubeadm 集群初始化工具
- kube-proxy 网络代理,负责网络相关的工作
开始安装
你也可以试下 这个项目,用脚本快速搭建 K8S 裸机集群
当然,为了更好的理解,你应该先手动搭建一次
设置对应主机名
1
2
3
4
5
6
7# 每个节点分别设置对应主机名
$ hostnamectl set-hostname master
$ hostnamectl set-hostname node1
$ hostnamectl set-hostname node2
# 查看是否修改成功
$ hostname修改 hosts
1
2
3
4
5# 所有节点都修改 hosts,ip需要修改成实际的
$ vi /etc/hosts
10.211.55.101 master
10.211.55.102 node1
10.211.55.103 node2关闭 SELinux
1
2
3# 所有节点关闭 SELinux
$ setenforce 0
$ sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux禁用交换分区(所有节点都执行)
临时关闭swap,重启后失效
1
2# 临时关闭swap,重启后失效
$ swapoff -a永久关闭
1
2
3$ swapoff -a
# 编辑 /etc/fstab 删除或注释掉 swap 一行
$ swapoff -a && sudo sed -i 's/^.*swap/#&/g' /etc/fstab
防火墙关闭
1
2# 所有节点确保防火墙关闭
$ systemctl stop firewalld && systemctl disable firewalld添加安装源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# 所有节点 添加 k8s 安装源
$ cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
$ mv kubernetes.repo /etc/yum.repos.d/
# 所有节点 添加 Docker 安装源
$ yum install -y yum-utils
$ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo安装所需组件
1
2
3
4
5# master 节点 安装 docker kubectl kubeadm kubelet
$ yum install -y docker-ce kubectl kubeadm kubelet
# node1 node2 节点 安装 docker kubeadm kubelet
$ yum install -y docker-ce kubeadm kubelet启动 kubelet、docker,并设置开机启动(所有节点)
1
2
3
4$ systemctl enable kubelet
$ systemctl start kubelet
$ systemctl enable docker
$ systemctl start docker修改系统配置,在文件 /etc/sysctl.conf 追加一行 (所有节点)
1
2$ echo "net.bridge.bridge-nf-call-iptables = 1" >> /etc/sysctl.conf
$ sysctl --system
修改 docker 配置
1 | # kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了 |
初始化集群
用 kubeadm 初始化集群(仅在主节点执行):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 初始化集群控制台 Control plane
# 失败了可以用 kubeadm reset 重置
# --pod-network-cidr 指定pod的IP地址范围,禁止与宿主机节点同网段,所以如果节点IP运行在192.168..,就使用10.0.0.0/16。如果是10.0..,就使用192.168.0.0/16
$ kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
# 记得把 kubeadm join xxx 保存起来
# 忘记了重新获取: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
# 在其他机器上创建 ~/.kube/config 文件也能通过 kubectl 访问到集群把工作节点加入集群(只在工作节点跑)
1
$ kubeadm join 10.211.55.101:6443 --token xxx --discovery-token-ca-cert-hash xxx
安装网络插件,否则 node 是 NotReady 状态(主节点跑)
1
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
查看集群状态
1
2
3
4
5$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 24m v1.23.1
node1 Ready <none> 7m17s v1.23.1
node2 Ready <none> 3m52s v1.23.1
设置网络
如果你运行 kubectl describe pod/pod-name
发现 Events 中有下面这个错误
1 | networkPlugin cni failed to set up pod "test-k8s-68bb74d654-mc6b9_default" network: open /run/flannel/subnet.env: no such file or directory |
在每个节点创建文件/run/flannel/subnet.env
写入以下内容即可解决
1 | FLANNEL_NETWORK=10.244.0.0/16 |
清空集群
先清空与子节点的通信(主节点执行)
1
2
3
4# kubectl drain <node name> --delete-emptydir-data --force --ignore-daemonsets
$ kubectl drain node1 --delete-emptydir-data --force --ignore-daemonsets
$ kubectl drain node2 --delete-emptydir-data --force --ignore-daemonsets删除节点(主节点执行)
1
2
3
4# kubectl delete node <node name>
$ kubectl delete node node1
$ kubectl delete node node2重置 kubeadm(所有节点执行)
1
$ kubeadm reset
Kubernetes集群的安装