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
相关文章
|
5月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
643 2
|
11月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1035 33
|
11月前
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
11月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
Kubernetes 容器
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(五)
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(五)
267 0
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(五)
|
Kubernetes 容器
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(四)
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(四)
232 0
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(四)
|
Kubernetes 应用服务中间件 API
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(二)
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(二)
243 0
KUBERNETES03_k8s对象是什么、如何管理、命名空间、代码自动补全提示(二)
|
4月前
|
人工智能 算法 调度
阿里云ACK托管集群Pro版共享GPU调度操作指南
本文介绍在阿里云ACK托管集群Pro版中,如何通过共享GPU调度实现显存与算力的精细化分配,涵盖前提条件、使用限制、节点池配置及任务部署全流程,提升GPU资源利用率,适用于AI训练与推理场景。
461 1
|
4月前
|
弹性计算 监控 调度
ACK One 注册集群云端节点池升级:IDC 集群一键接入云端 GPU 算力,接入效率提升 80%
ACK One注册集群节点池实现“一键接入”,免去手动编写脚本与GPU驱动安装,支持自动扩缩容与多场景调度,大幅提升K8s集群管理效率。
318 89
|
9月前
|
资源调度 Kubernetes 调度
从单集群到多集群的快速无损转型:ACK One 多集群应用分发
ACK One 的多集群应用分发,可以最小成本地结合您已有的单集群 CD 系统,无需对原先应用资源 YAML 进行修改,即可快速构建成多集群的 CD 系统,并同时获得强大的多集群资源调度和分发的能力。
517 9

推荐镜像

更多