乘风破浪,遇见云原生(Cloud Native)之Docker Desktop for Windows 快捷开启内置Kubernetes(K8S) v1.25 本地研发环境
前言
之前通过关于Kubernetes(简称K8S)的开启及基本使用,基于Docker Desktop & WSL2已经介绍过基于AliyunContainerService/k8s-for-docker-desktop项目如何启用Kubernetes的过程,但是他们跟进新版本没有Docker Desktop这么及时,这次我们直接通过Docker Desktop内置的模块来启用本地的Kubernetes环境。
Kubernetes v1.25
2022年8月23日,Kubernetes v1.25正式发布。
移除PodSecurityPolicy;PodSecurityAdmission成长为Stable
PodSecurityPolicy是在1.21版本中被弃用,到1.25版本被移除。因为提升其可用性的变更会带来破坏性的变化,所以有必要将其删除,以支持一个更友好的替代品。这个替代品就是PodSecurityAdmission,它在这个版本里成长为Stable。如果你最近依赖于PodSecurityPolicy,请参考PodSecurityAdmission迁移说明。
Ephemeral Containers成长为Stable
临时容器是在现有的Pod中存在有限时间的容器。当你需要检查另一个容器,但因为该容器已经崩溃或其镜像缺乏调试工具不能使用kubectl exec
时,它对故障排除特别有用。临时容器在Kubernetes v1.23中成长为Beta,并在这个版本中,该功能成长为Stable。
对cgroupsv2的支持进入Stable阶段
自Linux内核cgroups v2 API宣布稳定以来,已经有两年多的时间了。随着一些发行版现在默认使用该API,Kubernetes必须支持它以继续在这些发行版上运行。cgroups v2比cgroups v1提供了一些改进,更多信息参见cgroups v2文档。虽然cgroups v1将继续受到支持,但这一改进使我们能够为其最终的废弃和替代做好准备。
改善对Windows系统的支持
- 性能仪表板增加了对Windows系统的支持
- 单元测试增加了对Windows系统的支持
- 一致性测试增加了对Windows系统的支持
- 为Windows Operational Readiness创建了新的GitHub仓库
将容器注册服务从k8s.gcr.io迁移至registry.k8s.io
将容器注册服务从k8s.gcr.io迁移至registry.k8s.io的PR已经被合并。更多细节参考wiki页面,同时公告已发送到kubernetes开发邮件列表。
SeccompDefault升级为Beta
SeccompDefault升级为Beta,更多细节参考教程用seccomp限制一个容器的系统调用。
网络策略中endPort升级为Stable
网络策略中的endPort已经迎来GA正式发布。支持endPort字段的网络策略提供程序现在可使用该字段来指定端口范围,应用网络策略。在之前的版本中,每个网络策略只能指向单一端口。
请注意,网络策略提供程序必须支持endPort字段。如果提供程序不支持endPort,又在网络策略中指定了此字段,则会创建出仅覆盖端口字段(单端口)的网络策略。
本地临时容器存储容量隔离升级为Stable
本地临时存储容量隔离功能已经迎来GA正式发布版本。该功能在1.8版中作为alpha版本引入,在1.10中升级为beta,现在终于成为了稳定功能。它提供了对Pod之间本地临时存储容量隔离的支持,如EmptyDir,因此,如果一个Pod对本地临时存储容量的消耗超过该限制,就可以通过驱逐Pod来硬性限制其对共享资源的消耗。
核心CSI迁移为稳定版
CSI迁移是SIGStorage在之前多个版本中做出的持续努力。目标是将树内数据卷插件转移到树外CSI驱动程序并最终移除树内数据卷插件。此次核心CSI迁移已迎来GA。同样,GCEPD和AWSEBS的CSI迁移也进入GA阶段。vSphere的CSI迁移仍为beta(但也默认启用)。Portworx的CSI迁移同样处于beta阶段(但默认不启用)。
CSI临时数据卷升级为稳定版
CSI临时数据卷功能允许在临时使用的情况下在Pod里直接指定CSI数据卷。因此可以直接用它们在使用挂载卷的Pod内注入任意状态,如配置、秘密、身份、变量或类似信息。这个功能最初是作为alpha功能在1.15版本中引入,现在已升级为GA通用版。某些CSI驱动程序会使用此功能,例如存储密码的CSI驱动程序。
CRD验证表达式语言升级为Beta
CRD验证表达式语言已升级为beta版本,这使得声明如何使用通用表达式语言(CEL)验证自定义资源成为可能。请参考验证规则指导。
服务器端未知字段验证升级为Beta
ServerSideFieldValidation
特性门控已升级为beta(默认开启)。它允许在检测到未知字段时,有选择地触发API服务器上的模式验证机制。因此这允许从kubectl中移除客户端验证的同时保持相同的核心功能,即对包含未知或无效字段的请求进行错误处理。
引入KMS v2 API
引入KMS v2 alpha1 API以提升性能,实现轮替与可观察性改进。此API使用AES-GCM替代了AES-CBC,通过DEK实现静态数据(即KubernetesSecrets)加密。过程中无需额外用户操作,而且仍然支持通过AES-GCM和AES-CBC进行读取。更多信息参考使用KMSprovider进行数据加密指南。
Kube-proxy镜像当前基于无发行版镜像
在以前的版本中,kube-proxy的容器镜像是以Debian作为基础镜像构建的。从这个版本开始,其镜像现在使用distroless来构建。这一改变将镜像的大小减少了近50%,并将安装的软件包和文件的数量减少到只有kube-proxy工作所需的那些。
Docker Desktop版本
配置镜像站(加速)
可以通过Aliyun账号弄一个国内镜像加速器地址,https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
打开Docker Desktop
设置界面的Docker Engine
接口,在registry-mirrors
节点下增加国内加速的节点。
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"debug": false,
"experimental": false,
"features": {
"buildkit": true
},
"insecure-registries": [],
"registry-mirrors": [
"https://xxxx.mirror.aliyuncs.com"
]
}
点击Apply & Restart
按钮生效。
整理镜像库
将本地的镜像库做个清理,只保留那些In Use
的。
开启Kubernetes
再次前往设置界面,这次找到左侧Kubernetes
设置项,勾选复选框的Enable Kubernetes
,点击Apply & Restart
按钮生效。
这时候左下角会出现一个黄色的Kubernetes的状态条,等待它变绿了就是准备好了。
不到半个小时就搞定了,还是挺快的。
验证安装
查看Kubernetes版本
kubectl version
查看Kubernetes集群
kubectl cluster-info
查看Kubernetes节点
kubectl get nodes
相关镜像
docker images
hubproxy.docker.internal:5000/docker/desktop-kubernetes kubernetes-v1.25.0-cni-v1.1.1-critools-v1.24.2-cri-dockerd-v0.2.5-1-debian 2042e761d17a 6 weeks ago 363MB
k8s.gcr.io/kube-apiserver v1.25.0 4d2edfd10d3e 6 weeks ago 128MB
k8s.gcr.io/kube-controller-manager v1.25.0 1a54c86c03a6 6 weeks ago 117MB
k8s.gcr.io/kube-scheduler v1.25.0 bef2cf311509 6 weeks ago 50.6MB
k8s.gcr.io/kube-proxy v1.25.0 58a9a0c6d96f 6 weeks ago 61.7MB
k8s.gcr.io/pause 3.8 4873874c08ef 3 months ago 711kB
k8s.gcr.io/etcd 3.5.4-0 a8a176a5d5d6 4 months ago 300MB
k8s.gcr.io/coredns v1.9.3 5185b96f0bec 4 months ago 48.8MB
docker/desktop-vpnkit-controller v2.0 8c2c38aa676e 17 months ago 21MB
docker/desktop-storage-provisioner v2.0 99f89471f470 17 months ago 41.9MB