Kubernetes 实战教学,手把手教您用2个脚本在 PWK 上启用 Compose

简介: 在 Dockercon 的第二天,Docker 在 Kubernetes 项目上开源了 Compose。这个工具无疑可以简化 Kubernetes。

screenshot

出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五,与您不见不散!


在 Dockercon 的第二天,Docker 在 Kubernetes 项目上开源了 Compose。这个工具无疑可以简化 Kubernetes。如果您不知道,Docker 企业版已经在 Compose File 3.3 版本中启用了这个功能,它可以让您使用相同的 docker-compose.yml 文件进行 Swarm 部署,也可以在部署应用栈时指定 Kubernetes 工作负载。


screenshot

两周前,我注意到社区中有人要求在 Kubernetes Playground 上运行 Compose on Kubernetes。出于我的兴趣,我开始研究如何简化解决方案,以便任何人都能在短时间内轻松地设置它。我创建了镜像仓库,并开始构建一个简单的脚本和 Makefile 来启动它并在 PWK 上运行。点击下列文章标题,查看详情:

在这篇博文中,我将向您演示如何使用2个脚本就可以在 Play with Kubernetes 平台上启用 Compose on Kubernetes。接下来,让我们开始吧!


首先,浏览 https://labs.play-with-k8s.com/ 访问Kubernetes Playground。

screenshot

单击“Login”按钮,并使用 Docker Hub 或 GitHub ID 进行身份验证。

screenshot

一旦开始会话,您将拥有一个自己的实验室环境。


添加第一个 Kubernetes 节点

单击左侧的“Add New Instance” 来建您的第一个 Kubernetes 集群节点。它会自动将其命名为“node1”。每个实例都预装了Docker Community Edition(CE)和Kubeadm。该节点将被视为我们群集的主节点。

screenshot


引导主节点

克隆镜像仓库并在第一个实例上运行此脚本:

git clone https://github.com/collabnix/compose-on-kubernetes
cd compose-on-kubernetes/scripts/pwk/
sh bootstrap-pwk.sh

当您执行此脚本时,作为初始化的一部分,kubeadm 会编写所需的几个配置文件,设置 RBAC 并部署 Kubernetes 控制平面组件(如 kube-apiserver、kube-dns、kube-proxy 和 etcd 等)。控制平面组件部署为 Docker 容器。

screenshot

复制上面的 kubeadm 连接令牌命令并将其保存,以供下一步使用。此命令将用于将其他节点加入群集。


添加工作节点

screenshot

点击“Add New Node”来添加一个新的工作节点。


检查集群状态

[node1 ~]$ kubectl get nodes
NAME     STATUS    ROLES    AGE      VERSION
node1    Ready     master   18m      v1.11.3
node2    Ready        4m       v1.11.3
node3    Ready        39s      v1.11.3
node4    NotReady     22s      v1.11.3
node5    NotReady     4s       v1.11.3
[node1 ]$ kubectl get po
No resources found.
[node1 ]$ kubectl get svc
NAME        TYPE       CLUSTER-IP  EXTERNAL-IP  PORT(S)  AGE
kubernetes  ClusterIP  10.96.0.1          443/TCP  1h

执行以下脚本,一次性设置好 Compose Namespace、etcd cluster 和 Compose controller:

chmod +x prepare-pwk.sh
sh prepare-pwk.sh
[node1 pwk]$ sh prepare-pwk.sh
Creating Compose Namespace...
namespace/compose created
Installing Helm...
 % Total   % Received % Xferd Average Speed  Time   Time    Time Current
                                Dload Upload  Total  Spent   Left Speed
100 21.6M 100 21.6M   0    0 25.3M     0 --:--:-- --:--:-- --:--:-- 25.4M
Preparing Helm
linux-amd64/
linux-amd64/tiller
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md
Creating tiller under kube-system namespace...
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller-cluster-rule created
Creating /root/.helm
Creating /root/.helm/repository
Creating /root/.helm/repository/cache
Creating /root/.helm/repository/local
Creating /root/.helm/plugins
Creating /root/.helm/starters
Creating /root/.helm/cache/archive
Creating /root/.helm/repository/repositories.yaml
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com
Adding local repo with URL: http://127.0.0.1:8879/charts
$HELM_HOME has been configured at /root/.helm.
 
Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
 
Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!
 Tiller is still coming up...Please Wait
NAME                            READY    STATUS   RESTARTS  AGE
coredns-78fcdf6894-699fx        1/1      Running  0         5m
coredns-78fcdf6894-trslx        1/1      Running  0         5m
etcd-node1                      1/1      Running  0         4m
kube-apiserver-node1            1/1      Running  0         4m
kube-controller-manager-node1   1/1      Running  0         4m
kube-proxy-5gskp                1/1      Running  0         4m
kube-proxy-5hbkb                1/1      Running  0         5m
kube-proxy-lcsnz                1/1      Running  0         4m
kube-scheduler-node1            1/1      Running  0         4m
tiller-deploy-85744d9bfb-bjw2f  0/1      Running  0         15s
weave-net-9vt2s                 2/2      Running  1         4m
weave-net-k87d7                 2/2      Running  0         5m
weave-net-nmmt5                 2/2      Running  0         4m
NAME:  etcd-operator
LAST DEPLOYED: Mon Jan 21 14:27:50 2019
NAMESPACE: compose
STATUS: DEPLOYED
 
RESOURCES:
==> v1/ServiceAccount
NAME                                              SECRETS AGE
etcd-operator-etcd-operator-etcd-backup-operator  1       4s
etcd-operator-etcd-operator-etcd-operator         1       4s
etcd-operator-etcd-operator-etcd-restore-operator 1       4s
 
==> v1beta1/ClusterRole
NAME                                      AGE
etcd-operator-etcd-operator-etcd-operator 4s
 
==> v1beta1/ClusterRoleBinding
NAME                                              AGE
etcd-operator-etcd-operator-etcd-backup-operator  4s
etcd-operator-etcd-operator-etcd-operator         3s
etcd-operator-etcd-operator-etcd-restore-operator 3s
 
==> v1/Service
NAME                  TYPE      CLUSTER-IP   EXTERNAL-IP PORT(S)   AGE
etcd-restore-operator ClusterIP 10.108.89.92       19999/TCP 3s
 
==> v1beta2/Deployment
NAME                                              DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
etcd-operator-etcd-operator-etcd-backup-operator  1       1       1          0         3s
etcd-operator-etcd-operator-etcd-operator         1       1       1          0         3s
etcd-operator-etcd-operator-etcd-restore-operator 1       1       1          0         3s
 
==> v1/Pod(related)
NAME                                                            READY STATUS            RESTARTS AGE
etcd-operator-etcd-operator-etcd-backup-operator-56fd448cd897mk 0/1   ContainerCreating 0     2s
etcd-operator-etcd-operator-etcd-operator-c5b8b8f74-pttr2       0/1   ContainerCreating 0     2s
etcd-operator-etcd-operator-etcd-restore-operator-58587cdc9g4br 0/1   ContainerCreating 0     2s
 
 
NOTES:
1. etcd-operator deployed.
 If you would like to deploy an etcd-cluster set cluster.enabled to true in values.yaml
 Check the etcd-operator logs
   export POD=$(kubectl get pods -l app=etcd-operator-etcd-operator-etcd-operator --namespacecompose --output name)
   kubectl logs $POD --namespace=compose
Loaded plugins: fastestmirror, ovl
base                                                                   | 3.6 kB 00:00:00
docker-ce-stable                                                       | 3.5 kB 00:00:00
extras                                                                 | 3.4 kB 00:00:00
kubernetes/signature                                                   | 454 B 00:00:00
kubernetes/signature                                                   | 1.4 kB 00:00:10 !!!
updates                                                                | 3.4 kB 00:00:00
(1/7): base/7/x86_64/group_gz                                          | 166 kB 00:00:00
(2/7): extras/7/x86_64/primary_db                                      | 156 kB 00:00:00
(3/7): base/7/x86_64/primary_db                                        | 6.0 MB 00:00:00
(4/7): updates/7/x86_64/primary_db                                     | 1.3 MB 00:00:00
(5/7): docker-ce-stable/x86_64/primary_db                              | 20 kB 00:00:00
(6/7): docker-ce-stable/x86_64/updateinfo                              |  55 B 00:00:01
(7/7): kubernetes/primary                                              | 42 kB 00:00:01
Determining fastest mirrors
 * base: mirror.nl.datapacket.com
 * extras: mirror.nl.datapacket.com
 * updates: mirror.denit.net
kubernetes                                                                            305/305
Resolving Dependencies
--> Running transaction check
---> Package wget.x86_64 0:1.14-18.el7 will be installed
--> Finished Dependency Resolution
 
Dependencies Resolved
 
===============================================================================================
 Package           Arch                Version                     Repository         Size
===============================================================================================
Installing:
 wget              x86_64              1.14-18.el7                 base              547 k
 
Transaction Summary
===============================================================================================
Install 1 Package
 
Total download size: 547 k
Installed size: 2.0 M
Downloading packages:
wget-1.14-18.el7.x86_64.rpm                                            | 547 kB 00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Installing : wget-1.14-18.el7.x86_64                                                    1/1
install-info: No such file or directory for /usr/share/info/wget.info.gz
 Verifying : wget-1.14-18.el7.x86_64                                                    1/1
 
Installed:
 wget.x86_64 0:1.14-18.el7
 
Complete!
$HELM_HOME has been configured at /root/.helm.
 
Tiller (the Helm server-side component) has been upgraded to the current version.
Happy Helming!
etcdcluster.etcd.database.coreos.com/compose-etcd created
NAME                            READY    STATUS   RESTARTS  AGE
coredns-78fcdf6894-699fx        1/1      Running  0         6m
coredns-78fcdf6894-trslx        1/1      Running  0         6m
etcd-node1                      1/1      Running  0         5m
kube-apiserver-node1            1/1      Running  0         6m
kube-controller-manager-node1   1/1      Running  0         5m
kube-proxy-5gskp                1/1      Running  0         6m
kube-proxy-5hbkb                1/1      Running  0         6m
kube-proxy-lcsnz                1/1      Running  0         5m
kube-scheduler-node1            1/1      Running  0         5m
tiller-deploy-85744d9bfb-bjw2f  1/1      Running  0         1m
weave-net-9vt2s                 2/2      Running  1         6m
weave-net-k87d7                 2/2      Running  0         6m
weave-net-nmmt5                 2/2      Running  0         5m
--2019-01-21 14:28:49-- https://github.com/docker/compose-on-kubernetes/releases/download/v0.4.18/installer-linux
Resolving github.com (github.com)... 140.82.118.3, 140.82.118.4
Connecting to github.com (github.com)|140.82.118.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/158560458/e9a86500-15b2-11e9-8620-1eec5bf160e3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190121%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190121T142850Z&X-Amz-Expires=300&X-Amz-Signature=bd4020beb0f68210e2a3cfa8ca8166dddcf1d1e4868737eb9ad83363cd39c660&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dinstaller-linux&response-content-type=application%2Foctet-stream [following]
--2019-01-21 14:28:50-- https://github-production-release-asset-2e65be.s3.amazonaws.com/158560458/e9a86500-15b2-11e9-8620-1eec5bf160e3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190121%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190121T142850Z&X-Amz-Expires=300&X-Amz-Signature=bd4020beb0f68210e2a3cfa8ca8166dddcf1d1e4868737eb9ad83363cd39c660&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dinstaller-linux&response-content-type=application%2Foctet-stream
Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.161.163
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.161.163|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 28376064 (27M) [application/octet-stream]
Saving to: 'installer-linux'
 
100%[=====================================================>] 28,376,064 15.9MB/s  in 1.7s
 
2019-01-21 14:28:52 (15.9 MB/s) - 'installer-linux' saved [28376064/28376064]
 
INFO[0000] Checking installation state
INFO[0000] Install image with tag "v0.4.18" in namespace "compose"
INFO[0000] Api server: image: "docker/kube-compose-api-server:v0.4.18", pullPolicy: "Always"
INFO[0001] Controller: image: "docker/kube-compose-controller:v0.4.18", pullPolicy: "Always"
failed to find a Stack API version
error: the server doesn't have a resource type "stacks"
[node1 pwk]$ sh prepare-pwk.sh
Creating Compose Namespace...
Installing Helm...
 % Total   % Received % Xferd Average Speed  Time   Time    Time Current
                                Dload Upload  Total  Spent   Left Speed
100 21.6M 100 21.6M   0    0 14.9M     0 0:00:01 0:00:01 --:--:-- 14.9M
Preparing Helm
linux-amd64/
linux-amd64/tiller
linux-amd64/helm
linux-amd64/LICENSE
linux-amd64/README.md
Creating tiller under kube-system namespace...
clusterrolebindings.rbac.authorization.k8s.io "tiller-cluster-rule" already exists
$HELM_HOME has been configured at /root/.helm.
 
Tiller (the Helm server-side component) has been upgraded to the current version.
Happy Helming!
 Tiller is still coming up...Please Wait
NAME                            READY    STATUS   RESTARTS  AGE
coredns-78fcdf6894-699fx        1/1      Running  0         7m
coredns-78fcdf6894-trslx        1/1      Running  0         7m
etcd-node1                      1/1      Running  0         6m
kube-apiserver-node1            1/1      Running  0         6m
kube-controller-manager-node1   1/1      Running  0         6m
kube-proxy-5gskp                1/1      Running  0         6m
kube-proxy-5hbkb                1/1      Running  0         7m
kube-proxy-lcsnz                1/1      Running  0         6m
kube-scheduler-node1            1/1      Running  0         6m
tiller-deploy-85744d9bfb-bjw2f  1/1      Running  0         2m
weave-net-9vt2s                 2/2      Running  1         6m
weave-net-k87d7                 2/2      Running  0         7m
weave-net-nmmt5                 2/2      Running  0         6m
NAME           REVISION       UPDATED                        STATUS         CHART       APP VERSION    NAMESPACE
etcd-operator  1              Mon Jan 21 14:27:50 2019       DEPLOYED       etcd-operator-0.8.3   0.9.3          compose
Run: helm ls --all etcd-operator; to check the status of the release
Or run: helm del --purge etcd-operator; to delete it
Loaded plugins: fastestmirror, ovl
Loading mirror speeds from cached hostfile
 * base: mirror.nl.datapacket.com
 * extras: mirror.nl.datapacket.com
 * updates: mirror.denit.net
Package wget-1.14-18.el7.x86_64 already installed and latest version
Nothing to do
$HELM_HOME has been configured at /root/.helm.
 
Tiller (the Helm server-side component) has been upgraded to the current version.
Happy Helming!
etcdcluster.etcd.database.coreos.com/compose-etcd unchanged
NAME                            READY    STATUS   RESTARTS  AGE
coredns-78fcdf6894-699fx        1/1      Running  0         7m
coredns-78fcdf6894-trslx        1/1      Running  0         7m
etcd-node1                      1/1      Running  0         6m
kube-apiserver-node1            1/1      Running  0         7m
kube-controller-manager-node1   1/1      Running  0         7m
kube-proxy-5gskp                1/1      Running  0         7m
kube-proxy-5hbkb                1/1      Running  0         7m
kube-proxy-lcsnz                1/1      Running  0         6m
kube-scheduler-node1            1/1      Running  0         6m
tiller-deploy-85744d9bfb-bjw2f  1/1      Running  0         2m
weave-net-9vt2s                 2/2      Running  1         7m
weave-net-k87d7                 2/2      Running  0         7m
weave-net-nmmt5                 2/2      Running  0         6m
--2019-01-21 14:30:05-- https://github.com/docker/compose-on-kubernetes/releases/download/v0.4.18/installer-linux
Resolving github.com (github.com)... 140.82.118.3, 140.82.118.4
Connecting to github.com (github.com)|140.82.118.3|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github-production-release-asset-2e65be.s3.amazonaws.com/158560458/e9a86500-15b2-11e9-8620-1eec5bf160e3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190121%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190121T143006Z&X-Amz-Expires=300&X-Amz-Signature=53d5f390f91b968a53219512c18b696e1a085cbbd59cdb953ca95bea1aca4d60&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dinstaller-linux&response-content-type=application%2Foctet-stream [following]
--2019-01-21 14:30:06-- https://github-production-release-asset-2e65be.s3.amazonaws.com/158560458/e9a86500-15b2-11e9-8620-1eec5bf160e3?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190121%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190121T143006Z&X-Amz-Expires=300&X-Amz-Signature=53d5f390f91b968a53219512c18b696e1a085cbbd59cdb953ca95bea1aca4d60&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dinstaller-linux&response-content-type=application%2Foctet-stream
Resolving github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)... 52.216.233.59
Connecting to github-production-release-asset-2e65be.s3.amazonaws.com (github-production-release-asset-2e65be.s3.amazonaws.com)|52.216.233.59|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 28376064 (27M) [application/octet-stream]
Saving to: 'installer-linux.1'
 
100%[=====================================================>] 28,376,064 16.3MB/s  in 1.7s
 
2019-01-21 14:30:08 (16.3 MB/s) - 'installer-linux.1' saved [28376064/28376064]
 
INFO[0000] Checking installation state
INFO[0001] Compose version v0.4.18 is already installed in namespace "compose" with the same settings
compose.docker.com/v1beta1
compose.docker.com/v1beta2
Waiting for the stack to be stable and running...
db1: Pending           [pod status: 0/2 ready, 2/2 pending, 0/2 failed]
web1: Pending          [pod status: 0/3 ready, 3/3 pending, 0/3 failed]
db1: Ready             [pod status: 1/2 ready, 1/2 pending, 0/2 failed]
web1: Ready            [pod status: 1/3 ready, 2/3 pending, 0/3 failed]
 
Stack hellostack is stable and running
 
NAME        SERVICES  PORTS       STATUS                           CREATED AT
hellostack  2         web1: 8082  Progressing (Stack is starting)  2019-01-21T14:30:10Z

验证 Stack

[node1 pwk]$ kubectl get stack
NAME        SERVICES  PORTS       STATUS                        CREATED AT
hellostack  2         web1: 8082  Available (Stack is started)  2019-01-21T14:30:10Z
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
存储 Kubernetes 负载均衡
CentOS 7.9二进制部署K8S 1.28.3+集群实战
本文详细介绍了在CentOS 7.9上通过二进制方式部署Kubernetes 1.28.3+集群的全过程,包括环境准备、组件安装、证书生成、高可用配置以及网络插件部署等关键步骤。
460 3
CentOS 7.9二进制部署K8S 1.28.3+集群实战
|
2月前
|
Kubernetes 负载均衡 前端开发
二进制部署Kubernetes 1.23.15版本高可用集群实战
使用二进制文件部署Kubernetes 1.23.15版本高可用集群的详细教程,涵盖了从环境准备到网络插件部署的完整流程。
105 2
二进制部署Kubernetes 1.23.15版本高可用集群实战
|
1月前
|
Kubernetes 网络协议 Docker
Kubernetes入门到进阶实战
Kubernetes入门到进阶实战
83 0
|
2月前
|
Kubernetes Ubuntu 网络安全
Ubuntu基于kubeadm快速部署K8S实战
关于如何在Ubuntu系统上使用kubeadm工具快速部署Kubernetes集群的详细实战指南。
183 2
|
2月前
|
存储 Kubernetes Docker
深入探索容器化技术:Docker 实战与 Kubernetes 管理
深入探索容器化技术:Docker 实战与 Kubernetes 管理
73 0
|
2月前
|
Kubernetes Linux API
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
该博客文章详细介绍了在CentOS 7.6操作系统上使用kubeadm工具部署kubernetes 1.17.2版本的测试集群的过程,包括主机环境准备、安装Docker、配置kubelet、初始化集群、添加节点、部署网络插件以及配置k8s node节点管理api server服务器。
126 0
CentOS 7.6使用kubeadm部署k8s 1.17.2测试集群实战篇
|
2月前
|
Kubernetes 容器
Kubernetes附加组件Dashboard部署实战篇
关于如何在Kubernetes集群中部署和配置Dashboard组件的详细实战指南,涵盖了从创建证书、部署Dashboard、设置服务访问到登录认证的完整流程。
404 0
Kubernetes附加组件Dashboard部署实战篇
|
9天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
37 1
|
30天前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
1月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
下一篇
无影云桌面