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 controllerLonghorn

Nginx ingress controller

Nginx ingress controller用作入口控制器。

安装为裸金属,入口控制器通过NodePort服务来暴露。您可以自定义NodePort服务公开的端口,使用角色变量来更改这些值。

Longhorn

Longhorn是一个轻量级、可靠且强大的Kubernetes分布式块存储系统。

Longhorn使用容器和微服务实现分布式块存储。Longhorn为每个块设备卷创建一个专用的存储控制器,并在存储在多个节点上的多个副本之间同步复制该卷。存储控制器和副本本身使用Kubernetes进行编排。

Vagrant

要测试此角色,您可以使用VagrantVirtualbox启动示例基础设施。一旦下载了此仓库,使用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
许可证
gpl-3.0
下载
24
拥有者
☁️ Multi Cloud solution architect • 🖥️ Linux system engineer • 🚀 DevOps • 👨‍💻Software developer