公众号关注 「奇妙的 Linux 世界」

设为「星标」,每天带你玩转 Linux !

最近两年一直在使用 kubeadm 部署 kubernetes 集群,总体来说配合一些自己小脚本还有一些自动化工具还算是方便;但是全容器化稳定性确实担忧,也遇到过莫名其妙的证书过期错误,最后重启大法解决这种问题;所以也在探索比较方便的二进制部署方式,比如这个 k0s。

1k0s 介绍

The Simple, Solid & Certified Kubernetes Distribution.

k0s 可以认为是一个下游的 Kubernetes 发行版,与原生 Kubernetes 相比,k0s 并未阉割大量 Kubernetes 功能;k0s 主要阉割部分基本上只有 树内 Cloud provider,其他的都与原生 Kubernetes 相同。

k0s 自行编译 Kubernetes 源码生成 Kubernetes 二进制文件,然后在安装后将二进制文件释放到宿主机再启动;这种情况下所有功能几乎与原生 Kubernetes 没有差异。

2k0sctl 使用

k0sctl 是 k0s 为了方便快速部署集群所提供的工具,有点类似于 kubeadm,但是其扩展性要比 kubeadm 好得多。在多节点的情况下,k0sctl 通过 ssh 连接目标主机然后按照步骤释放文件并启动 Kubernetes 相关服务,从而完成集群初始化。

1. 使用 k0sctl 安装集群

安装过程中会自动下载相关镜像,需要保证所有节点可以科学上网,如何离线安装我们后面讲解。安装前,你需要保证目标机器的 hostname 为非域名形式,否则可能会出现一些问题。 以下是一个简单的启动集群示例:

  1. 首先安装 k0sctl

# 安装 k0sctl
$ wget https://github.com/k0sproject/k0sctl/releases/download/v0.9.0/k0sctl-linux-x64
$ chmod +x k0sctl-linux-x64
$ mv k0sctl-linux-x64 /usr/local/bin/k0sctl
  1. 然后编写 k0sctl.yaml 配置文件

$ vi k0sctl.yamlapiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:name: k0s-cluster
spec:hosts:- ssh:address: 10.0.0.11user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+worker- ssh:address: 10.0.0.12user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+worker- ssh:address: 10.0.0.13user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+worker- ssh:address: 10.0.0.14user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: worker- ssh:address: 10.0.0.15user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: workerk0s:version: 1.21.2+k0s.1config:apiVersion: k0s.k0sproject.io/v1beta1kind: Clustermetadata:name: k0sspec:api:address: 10.0.0.11port: 6443k0sApiPort: 9443sans:- 10.0.0.11- 10.0.0.12- 10.0.0.13storage:type: etcdetcd:peerAddress: 10.0.0.11network:kubeProxy:disabled: falsemode: ipvs

当然你也可以通过 k0sctl init --k0s > k0sctl.yaml 命令直接生成。

  1. 最后执行 k0sctl apply 命令安装即可

安装前确保你的操作机器可以 SSH 免密登陆所有目标机器。

$ k0sctl apply -c k0sctl.yaml⠀⣿⣿⡇⠀⠀⢀⣴⣾⣿⠟⠁⢸⣿⣿⣿⣿⣿⣿⣿⡿⠛⠁⠀⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀█████████ █████████ ███
⠀⣿⣿⡇⣠⣶⣿⡿⠋⠀⠀⠀⢸⣿⡇⠀⠀⠀⣠⠀⠀⢀⣠⡆⢸⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀███          ███    ███
⠀⣿⣿⣿⣿⣟⠋⠀⠀⠀⠀⠀⢸⣿⡇⠀⢰⣾⣿⠀⠀⣿⣿⡇⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠀███          ███    ███
⠀⣿⣿⡏⠻⣿⣷⣤⡀⠀⠀⠀⠸⠛⠁⠀⠸⠋⠁⠀⠀⣿⣿⡇⠈⠉⠉⠉⠉⠉⠉⠉⠉⢹⣿⣿⠀███          ███    ███
⠀⣿⣿⡇⠀⠀⠙⢿⣿⣦⣀⠀⠀⠀⣠⣶⣶⣶⣶⣶⣶⣿⣿⡇⢰⣶⣶⣶⣶⣶⣶⣶⣶⣾⣿⣿⠀█████████    ███    ██████████k0sctl 0.0.0 Copyright 2021, k0sctl authors.
Anonymized telemetry of usage will be sent to the authors.
By continuing to use k0sctl you agree to these terms:
https://k0sproject.io/licenses/eula
INFO ==> Running phase: Connect to hosts
INFO [ssh] 10.0.0.15:22: connected
INFO [ssh] 10.0.0.11:22: connected
INFO [ssh] 10.0.0.12:22: connected
INFO [ssh] 10.0.0.14:22: connected
INFO [ssh] 10.0.0.13:22: connected
INFO ==> Running phase: Detect host operating systems
INFO [ssh] 10.0.0.11:22: is running Ubuntu 20.04.2 LTS
INFO [ssh] 10.0.0.12:22: is running Ubuntu 20.04.2 LTS
INFO [ssh] 10.0.0.14:22: is running Ubuntu 20.04.2 LTS
INFO [ssh] 10.0.0.13:22: is running Ubuntu 20.04.2 LTS
INFO [ssh] 10.0.0.15:22: is running Ubuntu 20.04.2 LTS
INFO ==> Running phase: Prepare hosts
INFO ==> Running phase: Gather host facts
INFO [ssh] 10.0.0.11:22: discovered ens33 as private interface
INFO [ssh] 10.0.0.13:22: discovered ens33 as private interface
INFO [ssh] 10.0.0.12:22: discovered ens33 as private interface
INFO ==> Running phase: Download k0s on hosts
INFO [ssh] 10.0.0.11:22: downloading k0s 1.21.2+k0s.1
INFO [ssh] 10.0.0.13:22: downloading k0s 1.21.2+k0s.1
INFO [ssh] 10.0.0.12:22: downloading k0s 1.21.2+k0s.1
INFO [ssh] 10.0.0.15:22: downloading k0s 1.21.2+k0s.1
INFO [ssh] 10.0.0.14:22: downloading k0s 1.21.2+k0s.1
......

稍等片刻后带有三个 Master 和两个 Node 的集群将安装完成:

$ k1.node ➜ ~ k0s kubectl get node -o wide
NAME      STATUS   ROLES    AGE   VERSION       INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION     CONTAINER-RUNTIME
k1.node   Ready    <none>   10m   v1.21.2+k0s   10.0.0.11     <none>        Ubuntu 20.04.2 LTS   5.4.0-77-generic   containerd://1.4.6
k2.node   Ready    <none>   10m   v1.21.2+k0s   10.0.0.12     <none>        Ubuntu 20.04.2 LTS   5.4.0-77-generic   containerd://1.4.6
k3.node   Ready    <none>   10m   v1.21.2+k0s   10.0.0.13     <none>        Ubuntu 20.04.2 LTS   5.4.0-77-generic   containerd://1.4.6
k4.node   Ready    <none>   10m   v1.21.2+k0s   10.0.0.14     <none>        Ubuntu 20.04.2 LTS   5.4.0-77-generic   containerd://1.4.6
k5.node   Ready    <none>   10m   v1.21.2+k0s   10.0.0.15     <none>        Ubuntu 20.04.2 LTS   5.4.0-77-generic   containerd://1.4.6

注意: 目标机器 hostname 不应当为域名形式,这里的样例是已经修复了这个问题

2. k0sctl 的扩展方式

与 kubeadm 不同,k0sctl 几乎提供了所有安装细节的可定制化选项,其通过三种行为来完成扩展:

  • 文件上传: k0sctl 允许定义在安装前的文件上传,在安装之前 k0sctl 会把已经定义的相关文件全部上传到目标主机,包括不限于 k0s 本身二进制文件、离线镜像包、其他安装文件、其他辅助脚本等。

  • Manifests 与 Helm: 当将特定的文件上传到 master 节点的 /var/lib/k0s/manifests 目录时,k0s 在安装过程中会自动应用这些配置,类似 kubelet 的 static pod 一样,只不过 k0s 允许全部资源(包括不限于 deployment、daemonset、namespace 等);同样也可以直接在 k0sctl.yaml 添加 Helm 配置,k0s 也会以同样的方式帮你管理。

  • 辅助脚本: 可以在每个主机下配置 hooks 选项来实现执行一些特定的脚本(文档里没有,需要看源码),以便在特定情况下做点骚操作。

3. k0sctl 使用离线镜像包

基于上面的扩展,k0s 还方便的帮我们集成了离线镜像包的自动导入,我们只需要定义一个文件上传,将镜像包上传到 /var/lib/k0s/images/ 目录后,k0s 会自定将其倒入到 containerd 中而无需我们手动干预:

apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:name: k0s-cluster
spec:hosts:- ssh:address: 10.0.0.11user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+worker# files 配置将会在安装前将相关文件上传到目标主机files:- name: image-bundlesrc: /Users/bleem/tmp/bundle_file# 在该目录下的 image 压缩包将会被自动导入到 containerd 中dstDir: /var/lib/k0s/images/perm: 0755
......

关于 image 压缩包(bundle_file)如何下载以及自己自定义问题请参考官方 Airgap install 文档。

4. 切换 CNI 插件

默认情况下 k0s 内部集成了两个 CNI 插件: Calico 和 kube-router。如果我们需要使用其他的 CNI 插件,例如 Flannel,我们只需要将默认的 CNI 插件设置为 custom,然后将 Flannel 的部署 YAML 上传到一台 master 的 /var/lib/k0s/manifests 目录即可,k0s 会自动帮我门执行 apply -f xxxx.yaml 这种操作。

下面是切换到 Flannel 的样例,需要注意的是 Flannel 官方镜像不会帮你安装 CNI 的二进制文件,我们需要借助文件上传自己安装(CNI GitHub 插件下载地址):

apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:name: k0s-cluster
spec:hosts:- ssh:address: 10.0.0.11user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+workerfiles:# 将 flannel 的 yaml 放到 manifests 里(需要单独创建一个目录)- name: flannelsrc: /Users/bleem/tmp/kube-flannel.yamldstDir: /var/lib/k0s/manifests/flannelperm: 0644# 自己安装一下 CNI 插件- name: cni-pluginssrc: /Users/bleem/tmp/cni-plugins/*dstDir: /opt/cni/bin/perm: 0755k0s:version: v1.21.2+k0s.1config:apiVersion: k0s.k0sproject.io/v1beta1kind: Clustermetadata:name: k0sspec:api:address: 10.0.0.11port: 6443k0sApiPort: 9443sans:- 10.0.0.11- 10.0.0.12- 10.0.0.13storage:type: etcdnetwork:podCIDR: 10.244.0.0/16serviceCIDR: 10.96.0.0/12# 这里指定 CNI 为 custom 自定义类型,这样# k0s 就不会安装 calico/kube-router 了provider: custom

5. 上传 k0s 二进制文件

除了普通文件、镜像压缩包等,默认情况下 k0sctl 在安装集群时还会在目标机器上下载 k0s 二进制文件;当然在离线环境下这一步也可以通过一个简单的配置来实现离线上传:

apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:name: k0s-cluster
spec:hosts:- ssh:address: 10.0.0.11user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+worker# 声明需要上传二进制文件uploadBinary: true# 指定二进制文件位置k0sBinaryPath: /Users/bleem/tmp/k0sfiles:- name: flannelsrc: /Users/bleem/tmp/kube-flannel.yamldstDir: /var/lib/k0s/manifests/flannelperm: 0644
......

6. 更换镜像版本

默认情况下 k0s 版本号与 Kubernetes 保持一致,但是如果期望某个组件使用特定的版本,则可以直接配置这些内置组件的镜像名称:

apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:name: k0s-cluster
spec:hosts:- ssh:address: 10.0.0.11user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+workeruploadBinary: truek0sBinaryPath: /Users/bleem/tmp/k0sfiles:- name: flannelsrc: /Users/bleem/tmp/kube-flannel.yamldstDir: /var/lib/k0s/manifests/flannelperm: 0644
......k0s:version: v1.21.2+k0s.1config:apiVersion: k0s.k0sproject.io/v1beta1kind: Clustermetadata:name: k0sspec:api:address: 10.0.0.11port: 6443k0sApiPort: 9443sans:- 10.0.0.11- 10.0.0.12- 10.0.0.13# 指定内部组件的镜像使用的版本images:#konnectivity:#  image: us.gcr.io/k8s-artifacts-prod/kas-network-proxy/proxy-agent#  version: v0.0.21#metricsserver:#  image: gcr.io/k8s-staging-metrics-server/metrics-server#  version: v0.3.7kubeproxy:image: k8s.gcr.io/kube-proxyversion: v1.21.3#coredns:#  image: docker.io/coredns/coredns#  version: 1.7.0#calico:#  cni:#    image: docker.io/calico/cni#    version: v3.18.1#  node:#    image: docker.io/calico/node#    version: v3.18.1#  kubecontrollers:#    image: docker.io/calico/kube-controllers#    version: v3.18.1#kuberouter:#  cni:#    image: docker.io/cloudnativelabs/kube-router#    version: v1.2.1#  cniInstaller:#    image: quay.io/k0sproject/cni-node#    version: 0.1.0default_pull_policy: IfNotPresent#default_pull_policy: Never

7. 调整 master 组件参数

熟悉 Kubernetes 的应该清楚,master 上三大组件: apiserver、controller、scheduler 管控整个集群;在 k0sctl 安装集群的过程中也允许自定义这些组件的参数,这些调整通过修改使用的 k0sctl.yaml 配置文件完成。

  • spec.api.extraArgs: 用于自定义 kube-apiserver 的自定义参数(kv map)

  • spec.scheduler.extraArgs: 用于自定义 kube-scheduler 的自定义参数(kv map)

  • spec.controllerManager.extraArgs: 用于自定义 kube-controller-manager 自定义参数(kv map)

  • spec.workerProfiles: 用于覆盖 kubelet-config.yaml 中的配置,该配置最终将于默认的 kubelet-config.yaml 合并

除此之外在 Host 配置中还有一个 InstallFlags 配置用于传递 k0s 安装时的其他配置选项。

3K0s HA 搭建

上面的第二部分主要都是介绍 k0sctl 一些基础功能,为的就是给下面这部分 HA 生产级部署做铺垫。

就目前来说,k0s HA 仅支持独立负载均衡器的 HA 架构。 即外部需要有一个高可用的 4 层负载均衡器,其他所有 Node 节点链接这个负载均衡器实现 master 的高可用。在使用 k0sctl 命令搭建 HA 集群时很简单,只需要添加一个外部负载均衡器地址即可。

以下是一个完整的,全离线状态下的 HA 集群搭建配置。

1. 外部负载均衡器

在搭建之前我们假设已经有一个外部的高可用的 4 层负载均衡器,且负载均衡器已经负载了以下端口:

  • 6443(for Kubernetes API): 负载均衡器 6443 负载所有 master 节点的 6443

  • 9443 (for controller join API): 负载均衡器 9443 负载所有 master 节点的 9443

  • 8132 (for Konnectivity agent): 负载均衡器 8132 负载所有 master 节点的 8132

  • 8133 (for Konnectivity server): 负载均衡器 8133 负载所有 master 节点的 8133

以下为一个 Nginx 4 层代理的样例:

error_log syslog:server=unix:/dev/log notice;worker_processes auto;
events {multi_accept on;use epoll;worker_connections 1024;
}stream {upstream kube_apiserver {least_conn;server 10.0.0.11:6443;server 10.0.0.12:6443;server 10.0.0.13:6443;}upstream konnectivity_agent {least_conn;server 10.0.0.11:8132;server 10.0.0.12:8132;server 10.0.0.13:8132;}upstream konnectivity_server {least_conn;server 10.0.0.11:8133;server 10.0.0.12:8133;server 10.0.0.13:8133;}upstream controller_join_api {least_conn;server 10.0.0.11:9443;server 10.0.0.12:9443;server 10.0.0.13:9443;}server {listen        0.0.0.0:6443;proxy_pass    kube_apiserver;proxy_timeout 10m;proxy_connect_timeout 1s;}server {listen        0.0.0.0:8132;proxy_pass    konnectivity_agent;proxy_timeout 10m;proxy_connect_timeout 1s;}server {listen        0.0.0.0:8133;proxy_pass    konnectivity_server;proxy_timeout 10m;proxy_connect_timeout 1s;}server {listen        0.0.0.0:9443;proxy_pass    controller_join_api;proxy_timeout 10m;proxy_connect_timeout 1s;}
}

2. 搭建 K0s HA 集群

以下为 k0sctl 的 HA + 离线部署样例配置:

apiVersion: k0sctl.k0sproject.io/v1beta1
kind: Cluster
metadata:name: k0s-cluster
spec:hosts:- ssh:address: 10.0.0.11user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsa# role 支持的值# 'controller' 单 master# 'worker' 单 worker# 'controller+worker' master 和 worker 都运行 role: controller+worker# 从本地 上传 k0s bin 文件,不要在目标机器下载uploadBinary: truek0sBinaryPath: /Users/bleem/tmp/k0s# 上传其他文件files:# 上传 flannel 配置,使用自定的 flannel 替换内置的 calico- name: flannelsrc: /Users/bleem/tmp/kube-flannel.yamldstDir: /var/lib/k0s/manifests/flannelperm: 0644# 上传打包好的 image 镜像包,k0s 会自动导入到 containerd- name: image-bundlesrc: /Users/bleem/tmp/bundle_filedstDir: /var/lib/k0s/images/perm: 0755# 使用 flannel 后每个机器要上传对应的 CNI 插件- name: cni-pluginssrc: /Users/bleem/tmp/cni-plugins/*dstDir: /opt/cni/bin/perm: 0755- ssh:address: 10.0.0.12user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+workeruploadBinary: truek0sBinaryPath: /Users/bleem/tmp/k0sfiles:- name: image-bundlesrc: /Users/bleem/tmp/bundle_filedstDir: /var/lib/k0s/images/perm: 0755- name: cni-pluginssrc: /Users/bleem/tmp/cni-plugins/*dstDir: /opt/cni/bin/perm: 0755- ssh:address: 10.0.0.13user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: controller+workeruploadBinary: truek0sBinaryPath: /Users/bleem/tmp/k0sfiles:- name: image-bundlesrc: /Users/bleem/tmp/bundle_filedstDir: /var/lib/k0s/images/perm: 0755- name: cni-pluginssrc: /Users/bleem/tmp/cni-plugins/*dstDir: /opt/cni/bin/perm: 0755- ssh:address: 10.0.0.14user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: workeruploadBinary: truek0sBinaryPath: /Users/bleem/tmp/k0sfiles:- name: image-bundlesrc: /Users/bleem/tmp/bundle_filedstDir: /var/lib/k0s/images/perm: 0755- name: cni-pluginssrc: /Users/bleem/tmp/cni-plugins/*dstDir: /opt/cni/bin/perm: 0755- ssh:address: 10.0.0.15user: rootport: 22keyPath: /Users/bleem/.ssh/id_rsarole: workeruploadBinary: truek0sBinaryPath: /Users/bleem/tmp/k0sfiles:- name: image-bundlesrc: /Users/bleem/tmp/bundle_filedstDir: /var/lib/k0s/images/perm: 0755- name: cni-pluginssrc: /Users/bleem/tmp/cni-plugins/*dstDir: /opt/cni/bin/perm: 0755k0s:version: v1.21.2+k0s.1config:apiVersion: k0s.k0sproject.io/v1beta1kind: Clustermetadata:name: k0sspec:api:# 此处填写外部的负载均衡器地址,所有 kubelet 会链接这个地址externalAddress: 10.0.0.20# 不要忘了为外部负载均衡器添加 api 证书的 SANsans:- 10.0.0.11- 10.0.0.12- 10.0.0.13- 10.0.0.20# 存储类型使用 etcd,etcd 集群由 k0s 自动管理storage:type: etcdnetwork:podCIDR: 10.244.0.0/16serviceCIDR: 10.96.0.0/12# 网络插件使用 custom,然后让 flannel 接管provider: customkubeProxy:disabled: false# 开启 kubelet 的 ipvs 模式mode: ipvs# 不发送任何匿名统计信息telemetry:enabled: falseimages:default_pull_policy: IfNotPresent

最后只需要执行 k0sctl apply -c k0sctl.yaml 稍等几分钟集群就搭建好了,安装过程中可以看到相关文件的上传流程:

3. 证书续签和管理

kubeadm 集群默认证书有效期是一年,到期要通过 kubeadm 重新签署。k0s 集群也差不多一样,但是不同的是 k0s 集群更加暴力。只要 CA(默认 10年) 不丢,k0s 每次重启都强行重新生成一年有效期的证书,所以在 HA 的环境下,快到期时重启一下 k0s 服务就行。

k0sctl 安装完的集群默认只有一个 k0scontroller.service 服务,master、node 上所有服务都由这个服务启动,所以到期之前 systemctl restart k0scontroller.service 一下就行。

4集群备份和恢复

k0sctl 提供了集群备份和恢复功能,默认情况下只需要执行 k0sctl backup 即可完成集群备份,该命令会在当前目录下生成一个 k0s_backup_TIMESTAMP.tar.gz 备份文件。

需要恢复集群时使用 k0sctl apply --restore-from k0s_backup_TIMESTAMP.tar.gz 命令进行恢复即可;需要注意的是恢复命令等同于在新机器重新安装集群,所以有一定风险。

注:经过连续两天的测试,感觉这个备份恢复功能并不算靠谱,还是推荐使用 Velero 备份集群。

5其他高级功能

1. Etcd 替换

在小规模集群场景下可能并不需要特别完善的 Etcd 作为存储,k0s 借助于 kine 库可以实现使用 SQLite 或 MySQL 等传统数据库作为集群存储;如果想要切换存储只需要调整 k0sctl.yaml 配置即可:

apiVersion: k0s.k0sproject.io/v1beta1
kind: Cluster
metadata:name: k0s
spec:storage:type: kinekine:dataSource: "sqlite:///var/lib/k0s/db/state.db?more=rwc&_journal=WAL&cache=shared"

2. 集群用户管理

使用 k0sctl 搭建的集群通过 k0s 命令可以很方便的为集群添加用户,以下是添加样例:

$ k0s kubeconfig create --groups "system:masters" testUser > k0s.config

3. Containerd 配置

在不做配置的情况下 k0s 集群使用默认的 Containerd 配置,如果需要自己定义特殊配置,可以在安装时通过文件上传方式将 Containerd 配置文件上传到 /etc/k0s/containerd.toml 位置,该配置将会被 k0s 启动的 Containerd 读取并使用。

6总结

k0s 是个不错的项目,对于二进制宿主机部署 Kubernetes 集群很方便,由于其直接采用 Kubernetes 二进制文件启动,所以基本没有功能阉割,而 k0sctl 又为自动化安装提供了良好的扩展性,所以值得一试。不过目前来说 k0s 在细节部分还有一定瑕疵,比如 konnectivity 服务在安装时无法选择性关闭等。k0s 综合来说是个不错的工具,也推荐看看源码,里面很多设计很新颖也比较利于了解集群引导过程。

本文转载自:「 bleem 」,原文:https://tinyurl.com/puyt7f7d ,版权归原作者所有。欢迎投稿,投稿邮箱: editor@hi-linux.com。

你可能还喜欢

点击下方图片即可阅读

一文搞懂 4 种常用的 Kubernetes 容器

更多有趣的互联网新鲜事,关注「奇妙的互联网」视频号全了解!

再见 Kubernetes,是时候拥抱下一代轻量级容器编排平台 K0s 了!相关推荐

  1. Kubernetes(k8s)基础之二:容器编排介绍及概念

    目录 1.k8s对象 2. 容器编排的概念 2.1.K8S是如何对容器编排? 2.2.Pod是怎么创建出来的? 2.3.Pod资源组成的应用如何提供外部访问的? 2.4.Service又是怎么关联到P ...

  2. Tectonic 1.7升级了容器编排平台,提供了新的监控功能并支持微软Azure

    前言 最近,CoreOS更新了其基于Kubernetes的容器管理和编排平台,提供了新的监控功能,同时也支持微软 Azure. 今年6月, CoreOS对外发布了其Tectonic平台的1.7版本,首 ...

  3. 容器编排中的容器编排技术博客

    文章目录 <容器编排中的容器编排技术博客> <容器编排中的容器编排技术博客> 引言 1.1. 背景介绍 随着云计算和 DevOps 的兴起,容器化技术逐渐成为构建可扩展.灵活. ...

  4. 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读

    目录 引子 OpenStack 的诞生 OpenStack 是什么 Docker 的出现 K8S(Kubernetes) - 为 Docker 而生 推荐阅读 引子 作为一名程序员,设计程序架构.优化 ...

  5. NOMAD 与 KUBERNETES:比较容器编排工具——翻译版

    原文地址:https://www.imaginarycloud.com/blog/nomad-vs-kubernetes/?fbclid=IwAR1VgUJ4ikO30sDaZv7c9WYaVSPPo ...

  6. 1.09 容器编排Kubernetes

    1.kubernetes介绍 Kubernetes是Google开源的容器集群管理系统 简称k8s,2017年底,docker宣布支持k8s,宣布了k8s取得了阶段性胜利 2014年7月,Docker ...

  7. kubernetes不同的命名空间下的容器能通信吗_在Kubernetes环境中,容器间如何进行网络通信?...

    前 言 随着云计算的兴起,各大平台之争也落下了帷幕,Kubernetes作为后起之秀已经成为了事实上的PaaS平台标准,而网络又是云计算环境当中最复杂的部分,总是让人琢磨不透.本文尝试着围绕在Kube ...

  8. Docker容器化实战第七课 容器编排Docker Compose、Docker Swarm 和 Kubernetes

    19 如何使用 Docker Compoe 解决开发环境的依赖? 前两个模块,我们从 Docker 的基本操作到 Docker 的实现原理,为你一步一步揭开了 Docker 神秘的面纱.然而目前为止, ...

  9. 容器编排之战——kubernetes

    目录 一.kubernetes简介 1.基本概念 1.传统的应用部署方式 2.新的应用部署方式(部署容器) 3.容器编排工具中的战斗机--------Kubernetes 2.Kubernetes核心 ...

最新文章

  1. arp 不同网段 相同vlan_H3C交换机配置VLAN
  2. sublime插件开发教程(附源码)
  3. 软考-信息系统项目管理师-项目质量管理
  4. MVC Razor模板引擎 @RenderBody、@RenderPage、@RenderSection及Html.RenderPartial、Html.RenderAction...
  5. mysql数据库开发的36条军规
  6. tsc - error TS2304 Cannot find name 'Set'/'Promise'
  7. flyme7 android彩蛋,魅族 15 系列开启预约,Flyme7 或是发布会彩蛋
  8. 腕上“小型手机”!小米手表万事俱备 坐等发布
  9. 【linux】linux Vim编辑器快捷键
  10. java pattern详解_JAVA正则表达式:Pattern类与Matcher类详解
  11. 成功EDM电子邮件营销的要素和目标分析
  12. 排序算法----------堆排序
  13. 自适应滤波器(Adaptive Filter)(1)--简介
  14. python中的时间和时区详解(datetime / dateutil / pytz)
  15. 学习TypeScript
  16. 天冷就要大口吃肉肉~python采集周边烤肉店数据【附代码】
  17. 华为发生工商变更,瞄准5G车联网大蛋糕!(附产业重要数据下载)
  18. Cadence常规通孔焊盘的创建
  19. Shell脚本中如何将所有命令执行的结果定位到日志中
  20. 外媒:阿里巴巴选择中金和瑞信牵头安排香港股份发行

热门文章

  1. Java设计模式之build设计模式
  2. 笔试面试(IQ题集)
  3. Docker Registry Harbor
  4. 今天装librealsense的一些命令行记录
  5. ❤️太牛了,用python 居然可以生成 情话、床头诗、对联❤️
  6. 计算机一级百度英语,这款翻译机火到了中非合作论坛上 百度大脑让它更“聪明”...
  7. 恋那一地月光(转贴)
  8. 如何做APP界面设计
  9. 解决看英文文献复制段落翻译时的换行问题
  10. Node与express开发