前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >研发工程师玩转Kubernetes——部署应用

研发工程师玩转Kubernetes——部署应用

作者头像
方亮
发布2023-05-26 16:25:09
2810
发布2023-05-26 16:25:09
举报
文章被收录于专栏:方亮方亮

Kubernetes是容器的管理编排工具,而容器则是程序的载体。我们先在Docker上部署应用,然后再在kubernetes上部署,并对它们进行对比学习。

Docker部署应用

查看运行中的容器

代码语言:javascript
复制
docker ps

可以看到下面的表头,此时没有一个运行中的容器。

CONTAINER ID

IMAGE

COMMAND

CREATED

STATUS

PORTS

NAMES

部署应用

代码语言:javascript
复制
docker run --name nginx-container -p 80:80 -d nginx

–name nginx-container表示启动的容器名称是nginx-container。 -p 80:80表示将容器中的80端口和本机的80端口映射,这儿的-p 对应于–publish,而不是port。 -d 表示detach,即在后台运行该容器。 最后一个nginx参数是镜像名称。

代码语言:javascript
复制
Unable to find image ‘nginx:latest’ locally
latest: Pulling from library/nginx
9e3ea8720c6d: Pull complete
bf36b6466679: Pull complete
15a97cf85bb8: Pull complete
9c2d6be5a61d: Pull complete
6b7e4a5c7c7a: Pull complete
8db4caa19df8: Pull complete
Digest: sha256:480868e8c8c797794257e2abd88d0f9a8809b2fe956cbfbc05dcc0bca1f7cd43
Status: Downloaded newer image for nginx:latest
deae7732c6856ccb9aab86ef8d5254180354726de9f2afea451224051e1b9e90

由于本地没有nginx镜像,docker就会从服务器上拉取。最后一行输出的容器ID。

查看容器

我们再使用docker ps来查看容器,可以看到

CONTAINER ID

IMAGE

COMMAND

CREATED

STATUS

PORTS

NAMES

deae7732c685

nginx

“/docker-entrypoint.…”

4 minutes ago

Up 4 minutes

0.0.0.0:80->80/tcp, :::80->80/tcp

nginx-container

我们在ubuntu desktop上访问本机IP,可以看到nginx被启动了。

在这里插入图片描述
在这里插入图片描述

停止/删除容器

在上一步我们可以得到容器的ID是deae7732c685。通过这个ID我们便可以先停止容器,然后再删除它。

代码语言:javascript
复制
docker stop deae7732c685
docker rm deae7732c685

Kubernetes部署应用

Kubernetes虽然是容器管理工具,但是它最小可创建、管理和部署的计算单元叫Pod。一个Pod里可以有多个容器,一个Pod只能在一个Node里(后面会介绍,可以理解为一台虚拟机或者物理机)。

Pod
Pod
在这里插入图片描述
在这里插入图片描述

创建Pod

运行下面的指令可以创建一个名字是nginx的Pod,这个Pod下有一个容器,名字也是nginx。这些都是由kubectl run后的名字决定的。

代码语言:javascript
复制
kubectl run nginx --image=nginx --port=80

–image=nginx表示我们使用名字叫nginx镜像来创建容器。 –port=80表示容器对外暴露80端口,即可以通过Pod的IP+该端口访问服务。

Pod
Pod

查看Pod

下面指令可以查看所有pod信息

代码语言:javascript
复制
kubectl describe pods
代码语言:javascript
复制
Name:             nginx
Namespace:        default
Priority:         0
Service Account:  default
Node:             fangliang-virtual-machine/172.30.45.36
Start Time:       Thu, 18 May 2023 14:05:47 +0800
Labels:           run=nginx
Annotations:      cni.projectcalico.org/containerID: 43082ecdeaa830f47c46d84230c2c15f4fc80eb3c023f2e8f58aeed65386f92e
                  cni.projectcalico.org/podIP: 10.1.62.159/32
                  cni.projectcalico.org/podIPs: 10.1.62.159/32
Status:           Running
IP:               10.1.62.159
IPs:
  IP:  10.1.62.159
Containers:
  nginx:
    Container ID:   containerd://acf18704cd51e293363dbbed13b0f2a2066c5f5ab10e7ee153fcfbc92082b3e9
    Image:          nginx
    Image ID:       docker.io/library/nginx@sha256:480868e8c8c797794257e2abd88d0f9a8809b2fe956cbfbc05dcc0bca1f7cd43
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 18 May 2023 14:05:51 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-qtp6d (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  kube-api-access-qtp6d:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age   From               Message
  ----    ------     ----  ----               -------
  Normal  Scheduled  6s    default-scheduler  Successfully assigned default/nginx to fangliang-virtual-machine
  Normal  Pulling    6s    kubelet            Pulling image "nginx"
  Normal  Pulled     2s    kubelet            Successfully pulled image "nginx" in 3.616958719s (3.616963519s including waiting)
  Normal  Created    2s    kubelet            Created container nginx
  Normal  Started    2s    kubelet            Started container nginx

此时我们只能使用Pod的IP(10.1.62.159)访问nginx服务,而不能使用Node的IP(172.30.45.36)。

在这里插入图片描述
在这里插入图片描述

部署Service

为了能通过本机的IP访问服务,我们需要创建kubernetes的另外一个核心功能——Service。

代码语言:javascript
复制
 kubectl expose pod nginx --target-port=80 --type=NodePort --name=nginx-service

kubectl expose用于将资源暴露为新的Kubernetes Service。这儿我们直接暴露名字是nginx的pod,并通过–target-port=80参数让流向Kubernetes Service的流量流向上述pod的80端口。其中–type=NodePort表示,Kubernetes Service是NodePort类型,这样我们就可以通过本机IP访问容器里的nginx了。–name=nginx-service用于指定新创建的Kubernetes Service的名称。

查看Node对外提供服务的端口

代码语言:javascript
复制
kubectl describe service nginx-service
代码语言:javascript
复制
Name:                     nginx-service
Namespace:                default
Labels:                   run=nginx
Annotations:              <none>
Selector:                 run=nginx
Type:                     NodePort
IP Family Policy:         SingleStack
IP Families:              IPv4
IP:                       10.152.183.121
IPs:                      10.152.183.121
Port:                     <unset>  80/TCP
TargetPort:               80/TCP
NodePort:                 <unset>  31976/TCP
Endpoints:                10.1.62.161:80
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

在NodePort处,我们看到开放的端口是31976。我们必须使用这个端口去访问Service,它会把流量转向nginx所在Pod的80端口。

在这里插入图片描述
在这里插入图片描述

删除Service

代码语言:javascript
复制
kubectl delete service nginx-service 

fangliang@fangliang-Virtual-Machine:~/Documents/k8s_py_code$ kubectl delete service nginx-service

service “nginx-service” deleted

fangliang@fangliang-Virtual-Machine:~/Documents/k8s_py_code$ kubectl describe service nginx-service

Error from server (NotFound): services “nginx-service” not found

删除Pod

代码语言:javascript
复制
 kubectl delete pod nginx 

fangliang@fangliang-Virtual-Machine:~/Documents/k8s_py_code$ kubectl delete pod nginx

pod “nginx” deleted

fangliang@fangliang-Virtual-Machine:~/Documents/k8s_py_code$ kubectl describe pod

No resources found in default namespace.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Docker部署应用
    • 查看运行中的容器
      • 部署应用
        • 查看容器
          • 停止/删除容器
          • Kubernetes部署应用
            • 创建Pod
              • 查看Pod
                • 部署Service
                  • 查看Node对外提供服务的端口
                • 删除Service
                  • 删除Pod
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档