2.3 | kubernetes: Linux 常用网络命令的使用
2.3 | kubernetes: Linux 常用网络命令的使用
2.1 | kubernetes: 在裸机 Linux 上安装 k8s 集群
2.0 | kubernetes: Docker Desktop 安装单节点 k8s 集群
由于只需要对镜像进行 pull、tag、push 操作,因此不需要全套的 Docker 服务,这里选择了 Podman。Podman 有一个子命令就是 buildah,它主要负责镜像相关的操作,这样会更加精简。
在镜像中添加完 buildah 的依赖后,在容器中运行 buildah 时,报如下错误:
此问题的其中一个解决方案为:在宿主机中,修改
/proc/sys/user/max_user_namespaces
文件里面的值。但若采取此种方案,会导致线上环境 K8S 所在的宿主机,可能也要修改,这样的操作是不太可行的。
同事的踩坑经验:可以在 k8s 的 yaml 配置中,为 pod 开启特权模式,这样可以避免使用 user namespace。在 pod 定义处,添加配置,修改如下:
1 | securityContext: |
修改后,buildah 在容器中不再报错。但对上面的修改,一方面持有安全疑虑,另一方面不太明白其中的原理。
privileged
参数应该是会添加所有的 capabilities 到容器中(参考,Docker文档)。只给 buildah 所需的 Linux capabilities,初步验证在 testing 运行 ok。
1 | securityContext: |
其中 CAP_SYS_ADMIN
的作用是:允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等。
在之前的后端开发中,多多少少接触过一些 kubernetes 的内容,但是并未深入了解,在接触到 golang 编程以及 CD 发布系统的情形下,知道了 kubernetes 的强大之后,便开始找机会系统了解 kubernetes,因此了解 kubernetes 是一种不可多得的提升自我的方式,不论是从工作上、还是自我提升。
本文路线主要参照此教程给出的建议,记录遇到的问题以及对 kubernetes 的认识。
本周目标
学习任何系统的之前,了解其出现的背景和意义都是必不可少的,为什么会出现 Kubernetes?它解决了什么问题?有没有其他类似的系统?这里推荐阅读才云科技 CEO 张鑫在 2017 年文章《从风口浪尖到十字路口,写在 Kubernetes 两周年之际》。
推荐使用 minikube 或 kind 部署一个本地环境,然后开始部署一个”真实”的应用(minikube 安装需要使用科学上网,或使用“国内版” minikube)。如果想一开始就挑战更高难度的安装方式(不推荐),可以使用 kubeadm 或者手动部署所有组件。关于安装,可以参考文档 lab1-installation。
推荐熟练使用以下常用资源和概念:Pod、Node、Label、Event、Service、Configmap & Secret、Deployment、Namespace。相关学习可以参考文档 lab2-application-and-service。
(可选)仅完成上述内容可能还不足以让我们非常熟悉 Kubernetes 的基本概念,下面列出其他可以参考的资料,大家也可以按照自己的方式去搜索相关的资料: