前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习使用Kubectl部署Containers

学习使用Kubectl部署Containers

作者头像
sparkle123
发布2021-02-05 14:34:04
5900
发布2021-02-05 14:34:04
举报

如何使用Kubectl创建和启动部署、复制控制器,并通过服务公开它们,而不需要编写yaml定义。快速地将容器启动到集群中。

Step 1 - 启动集群

首先,我们需要启动一个Kubernetes集群。 执行命令minikube start——wait=false启动集群组件并下载Kubectl CLI

代码语言:javascript
复制
$ minkube start --wait=false
minkube: command not found
$ minikube start --wait=false
* minikube v1.8.1 on Ubuntu 18.04
* Using the none driver based on user configuration
* Running on localhost (CPUs=2, Memory=2460MB, Disk=145651MB) ...
* OS release is Ubuntu 18.04.4 LTS
* Preparing Kubernetes v1.17.3 on Docker 19.03.6 ...
  - kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
* Launching Kubernetes ... 
* Enabling addons: default-storageclass, storage-provisioner
* Configuring local host environment ...
* Done! kubectl is now configured to use "minikube"

通过命令kubectl get nodes,检查、等待节点就绪。

代码语言:javascript
复制
$ kubectl get nodes
NAME       STATUS     ROLES    AGE   VERSION
minikube   NotReady   master   14s   v1.17.3
$ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   18s   v1.17.3

Step 2 - 启动Kubectl

run命令根据指定的参数(如映像或副本)创建部署。这个部署被分发给Kubernetes主机,由它启动所需的Pods和containersKubectl run_docker run类似,但他是在集群级别。 命令格式为:

代码语言:javascript
复制
kubectl run <部署名称> <properties>

命令:

代码语言:javascript
复制
kubectl run http——image=katacoda/docker-http-server:latest——replicas=1

将启动一个名为http的部署,基于Docker映像katacoda/ Docker -http-server:latest启动一个容器。

代码语言:javascript
复制
$ kubectl run http --image=katacoda/docker-http-server:latest --replicas=1
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/http created

然后使用kubectl get deployments来查看部署的状态。

代码语言:javascript
复制
$ kubectl get deployments
NAME   READY   UP-TO-DATE   AVAILABLE   AGE
http   1/1     1            1           20s

kubectl describe deployment http 描述包括可用的副本数量、指定的标签以及与部署相关的事件。这些事件将突出显示可能发生的任何问题和错误。

代码语言:javascript
复制
$ kubectl describe deployment http
Name:                   http
Namespace:              default
CreationTimestamp:      Wed, 03 Feb 2021 14:03:28 +0000
Labels:                 run=http
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               run=http
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:  run=http
  Containers:
   http:
    Image:        katacoda/docker-http-server:latest
    Port:         <none>
    Host Port:    <none>
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      True    MinimumReplicasAvailable
  Progressing    True    NewReplicaSetAvailable
OldReplicaSets:  <none>
NewReplicaSet:   http-774bb756bb (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  88s   deployment-controller  Scaled up replica set http-774bb756bb to 1

Step 3 - Kubectl Expose

创建了部署后,我们可以使用kubectl创建一个服务,该服务在特定端口上公开pod。通过kubectl Expose公开新部署的http部署。该命令允许您定义服务的不同参数以及如何公开部署

se使用以下命令暴露与该主机的外部ip绑定的主机8000上的集装箱端口80。

代码语言:javascript
复制
$ kubectl expose deployment http --external-ip="172.17.0.40" --port=8000 --target-port=80
service/http exposed
$ curl http://172.17.0.40:8000
<h1>This request was processed by host: http-774bb756bb-dnzk4</h1>

Step 4 - Kubectl Run and Expose

使用kubectl run,可以创建部署并将其作为单个命令公开。 使用命令创建端口 8001上公开的第二个http服务

代码语言:javascript
复制
kubectl run httpexposed——image=katacoda/ Docker -http-server:latest——replicas=1——port=80——hostport=8001

使用curl访问http://172.17.0.40:8001

代码语言:javascript
复制
$ kubectl run httpexposed --image=katacoda/docker-http-server:latest --replicas=1 --port=80 --hostport=8001
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
Error from server (AlreadyExists): deployments.apps "httpexposed" already exists
$ curl http://172.17.0.40:8001
<h1>This request was processed by host: httpexposed-68cb8c8d4-zxcrk</h1>

在底层,这将通过Docker端口映射-Docker Port Mapping公开Pod。因此,你是没法看到kubectl get svc所列出的服务信息的,

代码语言:javascript
复制
$ kubectl get svc
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
http         ClusterIP   10.96.48.39   172.17.0.40   8000/TCP   19m
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP    44m

要使用docker ps | grep httpexposed才可以看到服务详细信息

代码语言:javascript
复制
$ docker ps | grep httpexposed
d7cc5f4a32c9        katacoda/docker-http-server   "/app"                   19 minutes ago      Up 19 minutes                              k8s_httpexposed_httpexposed-68cb8c8d4-zxcrk_default_592a02cd-9cb3-4aa6-91c4-8f60aeeaec00_0
ab9cf46a2fd0        k8s.gcr.io/pause:3.1          "/pause"                 19 minutes ago      Up 19 minutes       0.0.0.0:8001->80/tcp   k8s_POD_httpexposed-68cb8c8d4-zxcrk_default_592a02cd-9cb3-4aa6-91c4-8f60aeeaec00_0

暂停容器

运行上述命令,你会注意到Pod上公开端口,而不是http容器本身。Pause container负责为Pod定义网络。pod中的其他容器共享相同的网络名称空间。这提高了网络性能,并允许多个容器通过同一个网络接口进行通信。

Step 5 - Scale Containers

随着部署的运行,我们现在可以使用kubectl来扩展副本的数量。扩展部署将要求Kubernetes启动更多的Pods。然后,这些pod将使用暴露的服务自动进行负载平衡。

kubectl scale命令允许我们调整为特定部署或复制控制器运行的Pods的数量。

kubectl scale --replicas=3 deployment http 列出所有的pod,会看到三个正在为http部署运行

代码语言:javascript
复制
$ kubectl scale --replicas=3 deployment http
deployment.apps/http scaled
$ kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
http-774bb756bb-dnzk4         1/1     Running   0          32m
http-774bb756bb-gg9p8         1/1     Running   0          32s
http-774bb756bb-kmhpn         1/1     Running   0          32s
httpexposed-68cb8c8d4-zxcrk   1/1     Running   0          24m

一旦每个Pod启动,它将被添加到负载平衡器服务中。 kubectl describe svc http通过描述服务,您可以查看端点和包含的相关pod

向服务发出请求将在不同节点中请求。 curl http://172.17.0.40:8000

代码语言:javascript
复制
$ kubectl describe svc http
Name:              http
Namespace:         default
Labels:            run=http
Annotations:       <none>
Selector:          run=http
Type:              ClusterIP
IP:                10.104.156.248
External IPs:      172.17.0.27
Port:              <unset>  8000/TCP
TargetPort:        80/TCP
Endpoints:         172.18.0.4:80,172.18.0.6:80,172.18.0.7:80
Session Affinity:  None
Events:            <none>
$ curl http://172.17.0.27:8000
<h1>This request was processed by host: http-774bb756bb-jq4b8</h1>
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Step 1 - 启动集群
  • Step 2 - 启动Kubectl
  • Step 3 - Kubectl Expose
  • Step 4 - Kubectl Run and Expose
    • 暂停容器
    • Step 5 - Scale Containers
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档