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

news2024/11/23 9:13:10

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

Docker部署应用

查看运行中的容器

docker ps

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

CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES

部署应用

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参数是镜像名称。

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 IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
deae7732c685nginx“/docker-entrypoint.…”4 minutes agoUp 4 minutes0.0.0.0:80->80/tcp, :::80->80/tcpnginx-container

我们在ubuntu desktop上访问本机IP,可以看到nginx被启动了。
在这里插入图片描述

停止/删除容器

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

docker stop deae7732c685
docker rm deae7732c685

Kubernetes部署应用

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

创建Pod

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

kubectl run nginx --image=nginx --port=80

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

查看Pod

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

kubectl describe pods
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。

 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对外提供服务的端口

kubectl describe service nginx-service
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

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

 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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

图片压缩指定大小,让您的图片高效而优美

在现代社会中&#xff0c;图片是我们不可或缺的一部分&#xff0c;在各行业中都有着非常重要的作用。但是&#xff0c;大尺寸的图片不仅会占用过多的存储空间&#xff0c;还会导致网页或应用程序的加载速度变慢。因此&#xff0c;将图片压缩到指定大小是一个必要的步骤。 图片…

文档管理-gitlab+markdown网页插件

特点 使用git进行版本管理&#xff0c;本地编辑使用Typora。使用gitlab进行权限管理可以在线阅读通过Markdown在线阅读插件实现&#xff0c;可显示目录显示与链接跳转&#xff0c;界面优于自带的wiki。 与其他方式对比 gitlab的wiki&#xff1a;显示界面效果不好&#xff0c…

书籍《脆弱的繁华》读后感

前几周看完了《脆弱的繁华》这本书&#xff0c;这本书当时是公司组织的一次活动&#xff0c;邀请书籍原作者&#xff0c;张程对书籍进行了讲解&#xff0c;同时这本书也是在此次活动中免费赠送的&#xff0c;作者对于书籍做了一些说明&#xff0c;并且对一些问题也进行了探讨&a…

Azkaban 集群模式部署

文章目录 Azkaban 集群模式部署一、配置Mysql Azkaban 集群模式部署 将这三个包&#xff0c;上传到hadoop102&#xff0c;第一个是azkaban需要的建表语句 这三个解压到 /opt 目录下 输入命令&#xff1a;tar -zxvf azkaban-db-3.84.4.tar.gz -C /opt/ 输入命令&#xff1a;ta…

spring注册beanDefinition

代码使用springboot测试 1.ConfigurationClassPostProcessor 构造context时会创建reader。 构造reader时会创建processor。 最关键是第一个&#xff0c;类型是ConfigurationClassPostProcessor。 AbstractApplicationContext类的refresh方法的invokeBeanFactoryPostProcesso…

Node输出日志的正确姿势

背景 每个程序员都喜欢在有问题的代码中插入一些日志的方法来帮助调试程序&#xff0c;比如System.out.println或console.log。解决后&#xff0c;就会将这些语句删除&#xff0c;周而复始。 但是通过系统日志输出的日志格式都是这种&#xff1a; // output console.log(&quo…

TensoRF-张量辐射场论文笔记

TensoRF-张量辐射场论文笔记_什度学习的博客-CSDN博客 注释代码: https://github.com/xunull/read-TensoRF 官方源码&#xff1a;https://github.com/apchenstu/TensoRF Install environment conda create -n TensoRF python3.8 conda activate TensoRF pip install torch t…

HTTPTomcatServlet学习

HTTP&Tomcat 今日目标&#xff1a; 了解JavaWeb开发的技术栈理解HTTP协议和HTTP请求与响应数据的格式掌握Tomcat的使用掌握在IDEA中使用Tomcat插件理解Servlet的执行流程和生命周期掌握Servlet的使用和相关配置 1. Web概述 1.1 Web和JavaWeb的概念 Web是全球广域网&…

正点原子串口算法解析-定时器+数组长度判断

源码 片段1 片段2 片段3 解析 片段1的作用 开启一个10ms的定时器 片段2的作用 每10毫秒置位接收标志位且关闭定时器 片段3的作用和详解 代码第38行 用res变量接收数据 从代码第39行开始看 接收标志位不允许接收(不为0) 下面的所有代码都不会运行 如果接收标志为允许接收…

CRM管理系统如何选型?分别有什么作用?

CRM管理系统通常指CRM系统&#xff0c;中文名称是客户关系管理&#xff0c;起源于上世纪80年代的“接触管理”&#xff0c;它能确保客户在销售、营销、服务上的每一步交互都顺利高效&#xff0c;带动业绩的提升。今天就来说一说CRM管理系统是什么&#xff08;从使用到选型&…

【HarmonyOS】元服务混淆打包以及反混淆mapping文件生成

大家所知的Android中的“混淆”可以分为两部分&#xff0c;一部分是 Java 代码的优化与混淆&#xff0c;依靠 proguard 混淆器来实现&#xff1b;另一部分是资源压缩&#xff0c;从而可以减少包体积。 一般应用release发布的时候都会选择开启混淆&#xff0c;防止应用被反编译…

OpenPCDet系列 | 5.4.3 DenseHead中的AxisAlignedTargetAssigner正负样本分配模块

文章目录 AxisAlignedTargetAssigner模块assign_targets处理流程1. 提取有效gt信息2. 提取需要处理的类别信息3. 帧信息整合4. 批信息整合 assign_targets_single处理流程1. 构建每个anchor的正负样本label分配2. 构建每个anchor的正负样本编码信息bbox_targets分配3. 构建每个…

NMEA 2000总线连接器组成类别及功能

NMEA 2000总线介绍 连接的所有设备都能彼此通信 NMEA 2000总线系统是一种数字网络&#xff0c;可连接船上各种系统和设备&#xff0c;例如雷达、GPS、深度传感器、气象环境和船体控制系统。 NMEA 2000总线的工作方式 NMEA 2000总线通过总线连接器连接各个设备和系统&#xf…

HANTS时间序列滤波算法的MATLAB实现

本文介绍在MATLAB中&#xff0c;实现基于HANTS算法&#xff08;时间序列谐波分析法&#xff09;的长时间序列数据去噪、重建、填补的详细方法。 HANTS&#xff08;Harmonic Analysis of Time Series&#xff09;是一种用于时间序列分析和插值的算法。它基于谐波分析原理&#x…

linux 常用命令awk

AWK 是一种处理文本文件的语言&#xff0c;是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho&#xff0c;Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 AWK用法 awk 用法&#xff1a;awk pattern {action} files 1.RS, ORS, F…

CFS三层内网靶机渗透

目录 一、靶场框架 靶场搭建&#xff1a; 二、渗透过程 三、总结 靶场介绍&#xff1a; 三层内网靶场&#xff0c;共有三个网段&#xff0c;分别为75网段&#xff08;公网网段&#xff09;、22网段&#xff08;内网&#xff09;、33网段&#xff08;内网&#xff09; 靶…

ChatGPT+ “剪映 or 百度AIGC” 快速生成短视频

&#x1f34f;&#x1f350;&#x1f34a;&#x1f351;&#x1f352;&#x1f353;&#x1fad0;&#x1f951;&#x1f34b;&#x1f349;&#x1f95d; ChatGPT快速生成短视频 文章目录 &#x1f350;1.ChatGPT 剪映&#x1f34f;2.ChatGPT 百度AIGC平台&#x…

【ThinkPHP6系列学习-2】多应用模式配置

上一篇&#xff1a;【ThinkPHP6系列学习-1】下载并部署ThinkPHP6 这里写一写TP6下配置多应用。因为TP6和TP5有所差异&#xff0c;TP6默认是单应用模式&#xff08;单模块&#xff09;&#xff0c;而我们实际项目中往往是多应用的&#xff08;多个模块&#xff09;&#xff0c…

1.Buffer_Overflow-2.Stack_Overflow / 写入字符串

这道题虽然简单 但是却给我了另一个解题的看法 我们先进行运行 我们看看保护 发现只有NX保护 反汇编看看 发现有shellcode 但是我们没有办法执行shellcode 因为v5 不会等于后面的 这里我原本没有想法 后面进行看看他的汇编 这里其实就很清楚了 .text:00000000004011BB …

( 动态规划) 674. 最长连续递增序列 / 718. 最长重复子数组——【Leetcode每日一题】

题目一&#xff08;贪心&#xff09; ❓674. 最长连续递增序列 难度&#xff1a;简单 给定一个未经排序的整数数组&#xff0c;找到最长且 连续递增的子序列&#xff0c;并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r&#xff08;l < r&#xff09;确定…