garutilorenzo.ansible-role-linux-kubernetes
安装和配置高可用Kubernetes集群
这个Ansible角色将安装和配置一个高可用的Kubernetes集群。这个仓库通过kubeadm自动化Kubernetes的安装过程。
这个仓库只是一个示例,演示如何使用Ansible自动化来安装和配置Kubernetes集群。生产环境中,请使用Kubespray。
需求
安装ansible、ipaddr和netaddr:
pip install -r requirements.txt
从GitHub下载角色:
ansible-galaxy install git+https://github.com/garutilorenzo/ansible-role-linux-kubernetes.git
角色变量
此角色接受以下变量:
变量 | 必需 | 默认值 | 描述 |
---|---|---|---|
kubernetes_subnet |
是 | 192.168.25.0/24 |
Kubernetes将部署的子网。如果虚拟机或裸金属服务器有多个接口,Ansible将根据接口子网过滤Kubernetes使用的接口。 |
disable_firewall |
否 | no |
如果设置为yes,Ansible将禁用防火墙。 |
kubernetes_version |
否 | 1.25.0 |
要安装的Kubernetes版本 |
kubernetes_cri |
否 | containerd |
要安装的Kubernetes CRI。 |
kubernetes_cni |
否 | flannel |
要安装的Kubernetes CNI。 |
kubernetes_dns_domain |
否 | cluster.local |
Kubernetes默认的DNS域 |
kubernetes_pod_subnet |
否 | 10.244.0.0/16 |
Kubernetes Pod子网 |
kubernetes_service_subnet |
否 | 10.96.0.0/12 |
Kubernetes服务子网 |
kubernetes_api_port |
否 | 6443 |
kubeapi监听端口 |
setup_vip |
否 | no |
使用kube-vip设置Kubernetes VIP地址 |
kubernetes_vip_ip |
否 | 192.168.25.225 |
必需 如果setup_vip设置为yes。控制平面的VIP地址 |
kubevip_version |
否 | v0.4.3 |
kube-vip容器版本 |
install_longhorn |
否 | no |
安装Longhorn,Kubernetes的云原生分布式块存储。 |
longhorn_version |
否 | v1.3.1 |
Longhorn版本。 |
install_nginx_ingress |
否 | no |
安装nginx ingress controller |
nginx_ingress_controller_version |
否 | controller-v1.3.0 |
nginx ingress controller版本 |
nginx_ingress_controller_http_nodeport |
否 | 30080 |
nginx ingress controller用于传入HTTP流量的NodePort |
nginx_ingress_controller_https_nodeport |
否 | 30443 |
nginx ingress controller用于传入HTTPS流量的NodePort |
enable_nginx_ingress_proxy_protocol |
否 | no |
启用nginx ingress controller的代理协议模式 |
enable_nginx_real_ip |
否 | no |
启用nginx ingress controller的真实IP模块 |
nginx_ingress_real_ip_cidr |
否 | 0.0.0.0/0 |
必需 如果enable_nginx_real_ip设置为yes。用于真实IP模块的可信子网 |
nginx_ingress_proxy_body_size |
否 | 20m |
nginx ingress controller最大代理请求体大小 |
sans_base |
否 | [值的列表,请参见defaults/main.yml] |
用于签署kube-api证书的IP地址或FQDN列表 |
额外变量
此角色接受一个额外变量kubernetes_init_host。此变量在集群首次引导时使用。该变量的值必须为其中一个主节点的主机名。当Ansible在匹配的主机上运行时,将初始化Kubernetes。
部署的集群资源
通过此角色将安装Nginx ingress controller和Longhorn。
Nginx ingress controller
Nginx ingress controller用作入口控制器。
安装为裸金属,入口控制器通过NodePort服务来暴露。您可以自定义NodePort服务公开的端口,使用角色变量来更改这些值。
Longhorn
Longhorn是一个轻量级、可靠且强大的Kubernetes分布式块存储系统。
Longhorn使用容器和微服务实现分布式块存储。Longhorn为每个块设备卷创建一个专用的存储控制器,并在存储在多个节点上的多个副本之间同步复制该卷。存储控制器和副本本身使用Kubernetes进行编排。
Vagrant
要测试此角色,您可以使用Vagrant和Virtualbox启动示例基础设施。一旦下载了此仓库,使用Vagrant启动虚拟机:
vagrant up
在Vagrantfile中,您可以直接将您的公共SSH密钥注入到vagrant用户的authorized_keys中。您需要在Vagrantfile中更改CHANGE_ME占位符。您还可以通过更改NNODES变量(默认值:6)来调整部署的虚拟机数量。
使用此角色
要使用此角色,请跟随examples/目录中的示例。根据您的主机调整hosts.ini文件,然后运行剧本:
lorenzo@mint-virtual:~$ ansible-playbook -i hosts-ubuntu.ini site.yml -e kubernetes_init_host=k8s-ubuntu-0
PLAY [kubemaster] ***************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [k8s-ubuntu-2]
ok: [k8s-ubuntu-1]
ok: [k8s-ubuntu-0]
...
现在,我们已经部署了一个高可用的Kubernetes集群,可以检查集群的状态:
root@k8s-ubuntu-0:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-ubuntu-0 Ready control-plane 139m v1.24.3
k8s-ubuntu-1 Ready control-plane 136m v1.24.3
k8s-ubuntu-2 Ready control-plane 136m v1.24.3
k8s-ubuntu-3 Ready <none> 117m v1.24.3
k8s-ubuntu-4 Ready <none> 117m v1.24.3
k8s-ubuntu-5 Ready <none> 117m v1.24.3
检查pod状态:
root@k8s-ubuntu-0:~# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
ingress-nginx ingress-nginx-admission-create-tsc8p 0/1 Completed 0 135m
...
我们可以看到,longhorn、nginx ingress,以及所有kube-system的pod。
我们还可以检查nginx ingress controller的服务:
root@k8s-ubuntu-0:~# kubectl get svc -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller NodePort 10.111.203.177 <none> 80:30080/TCP,443:30443/TCP 136m
...
我们可以看到nginx ingress controller的监听端口,在这个例子中,HTTP端口是30080,HTTPS端口是30443。从外部机器测试ingress controller:
lorenzo@mint-virtual:~$ curl -v http://192.168.25.110:30080
...
如上所示,这些步骤可以成功执行和检查Kubernetes集群的状态和服务。
Install and configure a high available Kubernetes cluster
ansible-galaxy install garutilorenzo.ansible-role-linux-kubernetes