Kubernetes最低安装要求如下:
- 2个CPU和2GB内存
- 支持本地存储卷和Docker的Linux操作系统
- kubelet、kubeadm 和 kubectl 工具,版本>1.6
- Docker,版本>18.06
- 身份认证授权 设置工具,如RBAC(基于角色的访问控制)
- 集群网络插件,如Flannel、Calico等
Kubernetes需要以下镜像完成集群的部署:
- kube-apiserver:k8s的API服务进程镜像
- kube-controller-manager:控制器管理器进程镜像
- kube-scheduler:k8s调度器进程镜像
- kube-proxy:k8s网络代理进程镜像
- etcd:键值存储数据库镜像,用于存储k8s的集群数据
- pause:临时容器镜像,用于持有网络和存储资源
- coredns:k8s的Cluster DNS插件镜像
以上为最基本的镜像,一般我们还会使用以下镜像:
- dashboard: web UI仪表板插像
- metric-server: k8s的资源监控和metrics API插像
- ingress-nginx: ingress控制器插像
- …
在使用kubeadm工具部署Kubernetes集群时,这些镜像会被自动拉取。我们也可以自己将所需要的镜像提前拉取下来,在环境不通外网的情况下使用。
镜像列表详见Kubernetes的发布版本文档,以v1.20.1为例:
k8s.gcr.io/kube-apiserver:v1.20.1
k8s.gcr.io/kube-controller-manager:v1.20.1
k8s.gcr.io/kube-scheduler:v1.20.1
k8s.gcr.io/kube-proxy:v1.20.1
k8s.gcr.io/pause:3.2
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns:1.7.0
这里介绍如何使用kubeadm工具部署一个高可用的Kubernetes集群:
- 环境准备
- 准备3台虚拟机或物理机,配置主机名和hosts文件,开启ipvs、iproute2、conntrack等内核模块。
- 所有节点安装Docker并配置镜像仓库。
- 所有节点安装kubeadm、kubelet和kubectl。
- 初始化主节点
在主节点执行以下命令初始化集群:
bash
kubeadm init --kubernetes-version=v1.20.1 --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint "your_apiserver_lb_ip:6443"
其中control-plane-endpoint
指定apiserver负载均衡的IP和端口。
3. 部署网络插件
bash
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 加入工作节点
在工作节点执行:
bash
kubeadm join your_apiserver_lb_ip:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
用主节点输出的kubeadm join
命令加入集群。
5. 验证高可用性
在主节点部署一个测试应用:
bash
kubectl run nginx --image=nginx
kubectl expose deploy nginx --port=80 --type=NodePort
通过工作节点的IP+服务的NodePort访问该服务,确认可用。
6. 配置haproxy做apiserver LB
在LB节点安装haproxy,并配置apiserver的负载均衡:
bash
listen kube-apiserver-https
bind 0.0.0.0:6443
mode tcp
option tcplog
balance roundrobin
server master1 your_master1_ip:6443 check
server master2 your_master2_ip:6443 check
重启haproxy后,集群的高可用部署完成。
通过以上步骤,我们利用kubeadm工具快速部署了一个高可用的Kubernetes集群。Kubeadm大大降低了部署Kubernetes集群的难度,让应用可以更轻松地驾驭Kubernetes的调度与伸缩能力。