Kubernetes 实战教学,手把手教您如何在 K8s 平台上使用 Compose(二)

简介: 今天将展示如何在 Kubernetes 上运用 Compose 的实战演示。

screenshot

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


用过 Kubernetes 的用户都知道 Kubernetes API 真的非常庞大。在最新的版本中,从 Pods 和 Deployments 到 Validating Webhook Configuration 和 ResourceQuota,超过 50 个一级对象。如果您是开发人员,我确信这会很容易导致群集配置时出现紊乱。因此,需要一种简化的方法(如 Swarm CLI / API)来部署和管理在 Kubernetes 集群上运行的应用程序。在上一篇文章《Kubernetes 实战教学,手把手教您如何在 K8s 平台上使用 Compose(一)》中,简要的介绍了简化 Kubernetes 部署以及管理的工具 —— Compose,今天将展示如何在 Kubernetes 上运用 Compose 的实战演示。


测试所用的基础设施

  • Docker 版本:Docker Desktop Community v2.0.1.0;
  • 系统:macOS High Sierra v10.13.6;
  • Docker Engine:v18.09.1;
  • Docker Compose:v1.23.2;
  • Kubernetes:v1.13.0;

先决条件


验证 Docker Desktop 版本

[Captains-Bay]? > docker version

Client: Docker Engine - Community

 Version:          18.09.1

 API version:      1.39

 Go version:       go1.10.6

 Git commit:       4c52b90

 Built:            Wed Jan 9 19:33:12 2019

 OS/Arch:          darwin/amd64

 Experimental:     false

 

Server: Docker Engine - Community

 Engine:

 Version:         18.09.1

 API version:     1.39 (minimum version 1.12)

 Go version:      go1.10.6

 Git commit:      4c52b90

 Built:           Wed Jan 9 19:41:49 2019

 OS/Arch:         linux/amd64

 Experimental:    true

 Kubernetes:

 Version:         v1.12.4

 StackAPI:        v1beta2

[Captains-Bay]? >

安装 Minikube

curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 \
 && chmod +x minikube

验证 Minikube 版本

minikube version
minikube version: v0.32.0

检查 Minikube 状态

minikube status
host: Stopped
kubelet:
apiserver:

开始 Minikube

screenshot

]? > minikube start
Starting local Kubernetes v1.12.4 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Stopping extra container runtimes...
Machine exists, restarting cluster components...
Verifying kubelet health ...
Verifying apiserver health ....Kubectl is now configured to use the cluster.
Loading cached images from config file.
 
Everything looks great. Please enjoy minikube!
 
By now, you should be able to see context switching happening under UI windows under Kubernetes section as shown below:

检查 Minikube 状态

? > minikube status

host: Running

kubelet: Running

apiserver: Running

kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100[Captains-Bay]? >

列出 Minikube 集群节点

kubectl get nodes
NAME      STATUS   ROLES    AGE      VERSION
minikube  Ready    master   12h      v1.12.4

创建“compose”命名空间

kubectl create namespace compose
namespace "compose" created

创建“tiller”服务帐户

kubectl -n kube-system create serviceaccount tiller

serviceaccount "tiller" created

授予对集群的访问权限

kubectl -n kube-system create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount kube-system:tiller
clusterrolebinding "tiller" created

初始化 Helm 组件

? > helm init --service-account tiller

$HELM_HOME has been configured at /Users/ajeetraina/.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.

For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation

Happy Helming!

验证 Helm 版本

helm version
Client: &version.Version{SemVer:"v2.12.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.12.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

部署 etcd operator

? > helm install --name etcd-operator stable/etcd-operator --namespace compose
NAME:  etcd-operator
LAST DEPLOYED: Fri Jan 11 10:08:06 2019
NAMESPACE: compose
STATUS: DEPLOYED
 
RESOURCES:
==> v1/ServiceAccount
NAME                                              SECRETS AGE
etcd-operator-etcd-operator-etcd-backup-operator  1       1s
etcd-operator-etcd-operator-etcd-operator         1       1s
etcd-operator-etcd-operator-etcd-restore-operator 1       1s
 
==> v1beta1/ClusterRole
NAME                                      AGE
etcd-operator-etcd-operator-etcd-operator 1s
 
==> v1beta1/ClusterRoleBinding
NAME                                              AGE
etcd-operator-etcd-operator-etcd-backup-operator  1s
etcd-operator-etcd-operator-etcd-operator         1s
etcd-operator-etcd-operator-etcd-restore-operator 1s
 
==> v1/Service
NAME                  TYPE      CLUSTER-IP     EXTERNAL-IP PORT(S)   AGE
etcd-restore-operator ClusterIP 10.104.102.245       19999/TCP 1s
 
==> v1beta1/Deployment
NAME                                              DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
etcd-operator-etcd-operator-etcd-backup-operator  1       1       1          0         1s
etcd-operator-etcd-operator-etcd-operator         1       1       1          0         1s
etcd-operator-etcd-operator-etcd-restore-operator 1       1       1          0         1s
 
==> v1/Pod(related)
NAME                                                            READY STATUS            RESTARTS AGE
etcd-operator-etcd-operator-etcd-backup-operator-7978f8bc4r97s7 0/1   ContainerCreating 0        1s
etcd-operator-etcd-operator-etcd-operator-6c57fff9d5-kdd7d      0/1   ContainerCreating 0        1s
etcd-operator-etcd-operator-etcd-restore-operator-6d787599vg4rb 0/1   ContainerCreating 0        1s
 
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 --namespace compose --output name)
   kubectl logs $POD --namespace=compose
? >

创建 etcd 集群

$cat compose-etcd.yaml
apiVersion: "etcd.database.coreos.com/v1beta2"
kind: "EtcdCluster"
metadata:
 name: "compose-etcd"
 namespace: "compose"
spec:
 size: 3
 version: "3.2.13"
kubectl apply -f compose-etcd.yaml
etcdcluster "compose-etcd" created

这将在 compose 命名空间中引入一个 etcd 集群。


下载 Compose 安装程序

wget https://github.com/docker/compose-on-kubernetes/releases/download/v0.4.18/installer-darwin

在 Kubernetes 上部署 Compose

./installer-darwin -namespace=compose -etcd-servers=http://compose-etcd-client:2379 -tag=v0.4.18
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[0000] Controller: image: "docker/kube-compose-controller:v0.4.18", pullPolicy: "Always"

确保已启用 Compose Stack 控制器

[Captains-Bay]? > kubectl api-versions| grep compose
compose.docker.com/v1beta1
compose.docker.com/v1beta2

列出 Minikube 的服务

[Captains-Bay]? > minikube service list

|-------------|-------------------------------------|-----------------------------|

| NAMESPACE |               NAME                |            URL            |

|-------------|-------------------------------------|-----------------------------|

| compose    | compose-api                        | No node port               |

| compose    | compose-etcd-client                | No node port                             |

| compose    | etcd-restore-operator              | No node port               |

| default    | db1                                | No node port               |

| default    | example-etcd-cluster-client-service | http://192.168.99.100:32379 |

| default    | kubernetes                         | No node port               |

| default    | web1                               | No node port               |

| default    | web1-published                     | http://192.168.99.100:32511 |

| kube-system | kube-dns                           | No node port               |

| kube-system | kubernetes-dashboard               | No node port               |

| kube-system | tiller-deploy                      | No node port               |

|-------------|-------------------------------------|-----------------------------|

[Captains-Bay]? >

验证 StackAPI

[Captains-Bay]? > docker version

Client: Docker Engine - Community

 Version:          18.09.1

 API version:      1.39

 Go version:       go1.10.6

 Git commit:       4c52b90

 Built:            Wed Jan 9 19:33:12 2019

 OS/Arch:          darwin/amd64

 Experimental:     false

 

Server: Docker Engine - Community

 Engine:

 Version:         18.09.1

 API version:     1.39 (minimum version 1.12)

 Go version:      go1.10.6

 Git commit:      4c52b90

 Built:           Wed Jan 9 19:41:49 2019

 OS/Arch:         linux/amd64

 Experimental:    true

 Kubernetes:

 Version:         v1.12.4

 StackAPI:        v1beta2

[Captains-Bay]? >

直接使用 Docker Compose 部署 Web 应用程序堆栈

[Captains-Bay]? > docker stack deploy -c docker-compose2.yml myapp4

Waiting for the stack to be stable and running...

db1: Ready         [pod status: 1/2 ready, 1/2 pending, 0/2 failed]

web1: Ready       [pod status: 2/2 ready, 0/2 pending, 0/2 failed]

 

Stack myapp4 is stable and running

 

[Captains-Bay]? > docker stack ls

NAME               SERVICES           ORCHESTRATOR       NAMESPACE

myapp4             2                  Kubernetes         default

[Captains-Bay]? > kubectl get po

NAME                   READY    STATUS   RESTARTS  AGE

db1-55959c855d-jwh69   1/1      Running  0         57s

db1-55959c855d-kbcm4   1/1      Running  0         57s

web1-58cc9c58c7-sgsld  1/1      Running  0         57s

web1-58cc9c58c7-tvlhc  1/1      Running  0         57s

因此,我们使用 Docker Compose 文件成功地将一个 Web 应用程序栈部署到运行在 Minikube 中的单节点 Kubernetes 集群上。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
618 33
|
7月前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
390 5
|
7月前
|
Kubernetes 持续交付 数据库
阿里云ACK+GitLab企业级部署实战教程
GitLab 是一个功能强大的基于 Web 的 DevOps 生命周期平台,整合了源代码管理、持续集成/持续部署(CI/CD)、项目管理等多种工具。其一体化设计使得开发团队能够在同一平台上进行代码协作、自动化构建与部署及全面的项目监控,极大提升了开发效率和项目透明度。 GitLab 的优势在于其作为一体化平台减少了工具切换,高度可定制以满足不同项目需求,并拥有活跃的开源社区和企业级功能,如高级权限管理和专业的技术支持。借助这些优势,GitLab 成为许多开发团队首选的 DevOps 工具,实现从代码编写到生产部署的全流程自动化和优化。
|
7月前
|
人工智能 Kubernetes 异构计算
大道至简-基于ACK的Deepseek满血版分布式推理部署实战
本教程演示如何在ACK中多机分布式部署DeepSeek R1满血版。
|
9月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
1004 19
|
9月前
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
493 24
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
159 9
|
4月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
本文介绍如何利用阿里云的分布式云容器平台ACK One的多集群应用分发功能,结合云效CD能力,快速将单集群CD系统升级为多集群CD系统。通过增加分发策略(PropagationPolicy)和差异化策略(OverridePolicy),并修改单集群kubeconfig为舰队kubeconfig,可实现无损改造。该方案具备多地域多集群智能资源调度、重调度及故障迁移等能力,帮助用户提升业务效率与可靠性。
|
6月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
354 19
|
6月前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。

推荐镜像

更多