Ubuntu 20.04 部署单节点 K8s 集群并用MetalLB应用 Nginx Ingress
前言
这是一篇拖了一年的东西,大约一年前就要开始弄这部分,但是因为种种事情吧,拖延了。不过终于在今天把这个坑填上了。
下面的所有时间均基于当前时间(2022年04月06日)的线上最新版本。
下面的是所有的参考文档
- https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
- https://docs.docker.com/engine/install/ubuntu/
- https://shanyue.tech/k8s/prepare.html#%E7%89%88%E6%9C%AC
- https://cert-manager.io/docs/installation/
- https://kubernetes.github.io/ingress-nginx/deploy/
- https://kubernetes.github.io/ingress-nginx/deploy/baremetal/
上面就是差不多用到的所有文档了,其他一些安装的时候需要注意的东西,我会在下面的记录中标注出来,就不单独列出查到的网页了。
安装 docker
参照 https://docs.docker.com/engine/install/ubuntu/ 官方文档安装即可,不过这里在安装后,需要操作一个东西参照这里https://www.cnblogs.com/hongdada/p/9771857.html。我个人使用的是修改 docker
的方案。
修改或创建/etc/docker/daemon.json,加入下面的内容:
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
重启docker:
systemctl restart docker
systemctl status docker
为什么选择修改 docker
的方案呢,因为 k8s
那边已经推荐使用 systemd
且默认就是 systemd
了既然如此,那就在 docker
这边修改就好了。
至此 docker
就算搞定了。
使用 kubeadm 部署 k8s 集群
使用 kubeadm
的原因也是官方推出的东西,好用有方便。参考文档 https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
,这里有几个注意的点,端口是否都开放,多网卡的网卡选择问题。剩下的按照文档安装即可
初始化集群依然参照官方文档https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/,这里是有一点需要注意就是不要使用默认的 kubeadm init
而是使用 kubeadm init --pod-network-cidr=10.244.0.0/16
这里加上这个参数的原因就是为了后续使用网络附加组件的时候不会报错。如果出错了需要回滚使用 kubeadm reset
就可以了,一键无痛。我们这边是用的网络组件是 flannel
,选用这个的原因就是安装简单。https://github.com/flannel-io/flannel#flannel 安装也只有一条命令。到这里基本上就搞定了,不过这边也仅仅是搞定了 master
节点,现在也叫做 控制平面
了是吧。我们自己的服务还不能在这个机器上部署,原因就是 k8s
限制了,在控制平面
部署节点。我们需要使用去掉污点
的方式使这个机器可以被部署节点。毕竟我们是单节点嘛。
去掉污点
使用下面的命令。kubectl taint nodes --all node-role.kubernetes.io/master-
这样,一个单节点集群就搞定了。到这里安装部分就结束了。下面的部分就是实践 ingress
的部分了。注意:这里还没有写到存储部分,存储部分会在后面的有状态任务相关的部分写出或者单独写一篇。这篇主要解决 ingress
的问题。一个一个搞。
测试集群
测试部分主要参照https://shanyue.tech/k8s/pod.html#pod 这里来进行测试。如果一切顺利,链接里面的测试都会跑通,如果有部署失败的情况,通过 kubectl describe xxx
查看日志会很容易解决。
安装 ingress
参照文档https://kubernetes.github.io/ingress-nginx/deploy/一直可安稳的跑到 Local testing
结束。因为 online testing
部分我们是没法跑通的。为了能线上可用 https://metallb.universe.tf/installation/ 、 https://kubernetes.github.io/ingress-nginx/deploy/baremetal/ 参照这两篇文档。我个人的配置文件如下
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: default
protocol: layer2
addresses:
- xxx.xxx.xxx.xxx-xxx.xxx.xxx.xxx
xxx
部分就是ip地址,由于我是单节点,所以前后我都填写的我自己的地址,至于多个不同ip,我觉得可以写多行。等我以后遇到再说吧。
把这些都安装完后, online testing
也可以搞定了。不过现在大部分的服务都需要强制or半强制 https
了,所以证书也需要搞起来。
搞定证书
这部分主要参照 https://shanyue.tech/k8s/https.html#_01-%E4%BD%BF%E7%94%A8-helm-%E9%83%A8%E7%BD%B2-cert-manager 、 https://cert-manager.io/docs/installation/ 选用 cert-manager
的原因就是看到了第一篇的文章,安装部分就参照了官方文档。配置部分呢就参照https://cert-manager.io/docs/tutorials/acme/nginx-ingress/#step-6-configure-let-s-encrypt-issuer 这里来搞定了,不过这里面可能会有一些出错,这时候在结合 https://cert-manager.io/docs/configuration/acme/ 这里就好了。为什么说出错不确定呢,因为我这里也有些懵,按理说不能出错的,不过我就是出错了。所以按照这两个搞肯定会成功,自己摸索把。
跟服务关联方便参考 https://cert-manager.io/docs/usage/ingress/ 这里就基本上一次成了。查看证书命令 kubectl get certificate
就可以看到证书的生成状态了。
总结
一个很流水的东西,为什么不用自己的话在写一遍?一,因为文档更新及时。及使用新的就好了。二,自己在写未必人家写得好且明白。三,我只记录文档和自己遇到以后需要注意的点就这么多东西了。所以还是优先按照文档,在结合自己遇到的问题就好了。每次全新安装的时候都会保持最新。
- 原文作者:M1racle
- 原文链接:https://www.cimple.ink/2022/04/06/ubuntu-install-k8s-and-use-metallb-with-nginx-ingerss/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. 进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。