企业级运维之云原生与Kubernets实战课程 - 第一章第4讲 如何创建应用与暴露服务

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 本小节主要内容为K8s核心概念,包括声明式API、K8s组件控制器、SVC创建及使用、Pod生命周期管理及Kubectl常用命令和使用技巧。

企业级运维之云原生与Kubernets实战课程

第一章第4讲 如何创建应用与暴露服务

 

 

视频地址:https://developer.aliyun.com/learning/course/913/detail/14499

 

摘要:本小节主要内容为K8s核心概念,包括声明式APIK8s组件控制器、SVC创建及使用、Pod生命周期管理及Kubectl常用命令和使用技巧。

 

目录

 

  • 声明式API
  • 创建Deployment
  • 创建service服务
  • Kubectl常用命令和使用技巧

 

 

一、声明式API

 

1.  什么是声明式API

 

声明式API:提交的API对象不再是一个单体应用的描述,而是一个完整的分布式应用集群的描述。

 

2.  命令式API与生命式API

 image.png

 

  • 命令式API:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。
  • 声明式API:告诉“机器”你想要的是什么,让机器想出如何去做。

 

3.  声明式API核心原理

 

  • 当用户向 Kubernetes 提交了一个 API 对象的描述之后,Kubernetes会负责保障整个集群里各项资源的状态,确保与API 对象描述的需求相一致;
  • 更重要的是,这个保证是一项“无条件的”、“没有期限”的承诺:对于每个保存在etcd里的API对象,Kubernetes都通过启动一种叫做“控制器模式”(Controller Pattern) 的无限循环,不断检查,然后调谐,最后确保整个集群的状态与这个API对象的描述一致;
  • 简单理解就是对象的声明与对象的创建互相解耦,在普通程序中创建对象需要向操作系统申请资源,相似的在容器云平台上创建对象,需要向K8s申请资源;
  • K8s环境中,只需要提交一个申请单,然后由K8s系统完成对象的创建。

 

4.  声明式API与控制器总结

 image.png

 

二、创建Deployment

 

1.  什么是Deployment

 

简单来说,Deployment是管理无状态应用部署发布的控制器,相当于管理Pod的经理人。

 

K8s中,组件控制器controller包括:

  • Deployment:无状态
  • Statefulset:有状态
  • Job:运行一个任务
  • Cronjob:周期性运行
  • Daemonset:在指定的node或者所有的node上运行一个pod
  • HPA :根据资源使用状况,来维持扩容/缩容副本数(客户自定义的资源维度)

 image.png

 

如图,通过Deployment将应用ABC分别规划到不同的容器组中,每个Deployment其实是管理的一组相同的应用Pod,这组Pod我们认为它是相同的一个副本。

 

2.  Deployment功能

 

  • 定义一组Pod的期望数量,Deployment控制器会维持Pod数量与期望数量一致;
  • 配置Pod发布方式,Deployment控制器会按照给定策略更新Pod,保证更新过程中不可用的Pod数量在限定范围内;
  • 如果发布有问题,支持“一键”回滚。

 

比如说应用A期望的Pod数量是4个,controller就会持续维持Pod数量为期望的数量,当Pod出现了网络问题或者宿主机问题,controller能将其恢复,也就是新扩出来对应的Pod,来保证可用Pod数量与期望数量一致。

 

3.  Deployment语法

 image.png

 

  • MetadataDeployment元信息;
  • ReplicasPod的最终数量;
  • SelectorPod的选择器;
  • TemplatePod模板;
  • Pod image:镜像版本;
  • Labels:标签

 

在容器更新镜像时,Deployment要通过新建Pod更新容器镜像,可以通过maxsurgemaxUnavailable来保证副本数一致,如:

 

  • replicas4
  • maxSurge:25%,那么4*1.25=5(最多5running的副本)
  • maxUnavailable:25%,那么4*0.75=3(最小3个不可用)

 

亦即,在滚动更新时,最多5running的副本,最小3个不可用副本。

 

Deployment中,revisionHistory可以设置保持历史版本的个数,在Deployment创建Pod时,会通过replicaset来拉起PodDeploymentPod之间无直接联系,而是通过replicaset来管理Pod。  

 

4.  Deployment相关操作

 image.png

 

a.  Deployment创建无状态服务:

  • kubectl rollout history deployment:查看历史Pod版本;
  • kubectl rollout undo deployment:回滚发布;
  • kubectl scale deployment/xxxxxx为容器名)--replicas=n(n为副本数):进行副本的扩缩容;
  • kubectl get pod -owide:查看Pod所运行的节点信息。

 

b.  Statefulset:创建有状态服务(略);

 

c.  Job会创建一个或者多个Pod,直到运行成功为止,运行成功后正常退出;

kubectl get job:查看job类型的Pod

kubectl describe job xxx(job服务名):查看job的运行信息;

ParallelismJob运行时并行数;

CompletionsJob运行成功数;

backoffLimit(失败阀值):设置activeDeadlinesSeconds时间,一旦job运行时间达到这个设置值,终止所有的pod。可以编写yaml文件设置每次启动一个job运行五次和设置并行启动两个job运行六次,通过命令watch  -d kubectl get 监控job创建的次数发现,job的启动是按照并行数启动,然后正常退出,直到完成所有运行次数。

 

d.  CronJob:周期性的执行job类似Linuxcrontab

设置方式:Schedule:"*/1 * * * *"表示每分钟都运行1

 

  • startingDeadlineSeconds

 

如果startingDeadlineSeconds字段非空,则控制器会统计从startingDeadlineSeconds设置的值到现在、而不是从上一个计划时间到现在错过了多少次Job。例如,如果startingDeadlineSeconds200,则控制器会统计在过去200秒中错过了多少次Job

 

  • concurrencyPolicy,共同运行的policyallowforbid

 

如果未能在调度时间内创建CronJob,则计为错过。例如,如果concurrencyPolicy被设置为Forbid,并且当前有一个调度仍在运行的情况下,试图调度的CronJob将被计算为错过。

 

  • 情况1concurrencyPolicy=forbidstartingDeadlineSeconds默认,CronJob被设置为从08:30:00开始每隔一分钟创建一个新的Job;如果CronJob控制器从08:29:0010:21:00终止运行,则该Job将不会启动,因为其错过的调度次数超过了100
  • 情况2concurrencyPolicy=forbidstartingDeadlineSeconds=200,如果CronJob控制器恰好在与上一个示例相同的时间段(08:29:0010:21:00)终止运行,则Job仍将从10:22:00开始。造成这种情况的原因是控制器现在检查在最近200秒(即3个错过的调度)中发生了多少次错过的Job调度,而不是从现在为止的最后一个调度时间开始。

 

e.  DaemonsetPod会在指定的node或者所有的node上运行。

 

三、创建Service暴露服务

 

1. 什么是serviceSVC

 

ServiceKubernetes中的服务发现与负载均衡。

 

为什么需要服务发现?Kubernetes应用应如何相互调用?Kubernetes应用应如何相互调用?

 

  • Pod生命周期短暂,IP地址随时变化;
  • Deployment等的Pod组需要统一访问入口和做负载均衡;
  • 应用间在不同环境部署时保持同样的部署拓扑和访问方式;
  • 集群内可以通过service name 直接访问

 

2. Service语法

 image.png

 

3. Service类型

 

a.  ClusterIP:分配一个集群内部的IP地址,只能在集群内部访问。

 image.png

 

  • kubectl get svc:查看创建了哪些SVC
  • kubectl get ep xxx(svc的名字):查看svc后端挂载的服务;
  • curl命令:访问该服务。
  • 流量流转:从client访问SVC,SVC通过iptablesIpvs转发到后端PodSVC通过Lable选择PodClusterIP暴露的SVC可以通过集群内部访问或Pod访问;

 image.png

 

  • 无头Service 指定 clusterlP: None
  • Pod 通过 service_name 方式访问时可以获取到所有后端Pod IP
  • 客户端应用自主选择需要访问的Pod

 

b.  NodePort:分配一个集群内部的IP地址,并在每个节点上启用一个端口来暴露服务,可以在集群外部被访问。

 

c.  Loadblalancer:分配一个集群内部的IP地址,并在每个节点上启用一个端口来暴露服务,除此之外,kubernetes会请求底层云平台上的负载均衡器,把Node节点作为后端添加进去。

  • 通过NodePortSLB配合的方式,创建NodePort模式的SVC并在前面加上负载均衡,通过NodePort把节点暴露出来,客户端可以访问节点端口就是访问了SVC进而访问了后端Pod
  • 可以通过命令kubectl describe svc xxx(svc服务名),查看NodePort暴露的端口;
  • LoadblalancerSVC,在master节点上有组件CCM (c1ond contro11er mannger)去创建/复用已经存在的SLB的设备,并把这些集群节点加到 SLB,外部客户端访问SLB(ip)就会被转发到后端节点SVC上再转发到Pod,而SLB一般都是多可用区容灾,不存在单点故障。

 

d.  Externalname:把外部相关域名或IP引入到集群内部;

  • <svc name>.<ns>.svc.cluster.local:集群内部访问外部域名访问方式;
  • 好处:内部代码不必写死外部的IP,如果外部IP改变,只需要变更SVC即可,不需要改动代码。

 

本讲小结

 

1.  Deploymentdaemonsetjobcronjobsvc等内容。

2.  Kubectl的相关命令,Pod滚动更新等内容。

3.  SVC

 

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
16天前
|
Kubernetes Cloud Native Go
云原生技术在现代企业的应用与挑战
本文将深入探讨云原生技术如何在现代企业中被广泛应用,并分析其面临的主要挑战。我们将通过一个具体的代码示例,展示云原生应用的开发流程,以及如何利用Kubernetes进行容器编排。文章旨在为读者提供对云原生生态系统的全面了解,并鼓励企业探索这一前沿技术以保持竞争力。
30 3
|
19天前
|
Cloud Native Devops 持续交付
云原生技术在现代软件开发中的应用与挑战
随着云计算技术的不断成熟,云原生(Cloud Native)技术正迅速成为现代软件开发的重要趋势。本文将深入探讨云原生的定义、核心技术(如容器化、微服务、DevOps等),并分析其在实际应用中的优势与面临的挑战。通过案例研究,展示云原生技术如何帮助企业实现高效开发、灵活部署和弹性扩展,从而在激烈的市场竞争中脱颖而出。 ##
|
18天前
|
Cloud Native 物联网 持续交付
云原生架构:构建现代应用的基石
随着数字化转型的深入,企业对软件开发的速度和灵活性提出了更高的要求。云原生架构作为一种新兴的技术范式,以其独特的优势,正在成为现代应用开发的主流选择。本文将探讨云原生架构的核心概念、关键技术以及实践应用,帮助读者理解如何利用云原生技术构建高效、可扩展的现代应用。
48 1
|
9天前
|
运维 监控 Cloud Native
构建行业应用生态:云原生应用市场简化企业软件安装
在移动互联网时代,尽管手机应用市场为用户带来了极大的便利,但企业级软件的安装和管理仍面临诸多挑战,包括安装复杂、交付效率低、应用兼容性差等问题。为此,基于云原生技术的企业级应用市场Rainstore应运而生,旨在简化企业软件的安装和管理,提升交付效率,增强应用兼容性,支持远程管理和个性化定制,构建开放的行业应用生态,助力企业数字化转型。
构建行业应用生态:云原生应用市场简化企业软件安装
|
2天前
|
运维 监控 Cloud Native
云原生技术在现代企业中的应用与挑战####
【10月更文挑战第15天】 本文深入探讨了云原生技术如何重塑企业的IT架构,并分析了其带来的机遇与面临的挑战。通过案例分析,揭示了云原生技术在提升业务敏捷性、降低运维成本方面的显著优势,同时也指出了在安全性、多云管理等方面的潜在难题,为企业决策者提供了有价值的参考。 ####
12 3
|
6天前
|
人工智能 运维 Cloud Native
云原生应用开发平台 CAP(Cloud Application Platform)应用心得
云原生应用开发平台 CAP(Cloud Application Platform)是阿里云提供的一站式应用开发及应用生命周期管理平台。
14 1
|
8天前
|
运维 Cloud Native 持续交付
云原生技术:构建现代应用的基石
【10月更文挑战第9天】在数字化转型的浪潮中,云原生技术如同一股清流,引领着企业走向更加灵活、高效的未来。本文将深入探讨云原生的核心概念,揭示其在现代应用开发与部署中的重要作用,并通过实际案例分析,展现云原生技术如何助力企业实现敏捷开发和自动化运维,最终提升业务竞争力。
27 3
|
8天前
|
运维 Kubernetes Cloud Native
云原生技术:构建现代应用的新范式
【10月更文挑战第9天】 云原生是一种通过云计算环境优化的软件开发和运行方法论,旨在最大化利用云平台的灵活性、可扩展性和弹性。本文将深入探讨云原生技术的基本原理、核心组件以及其在实际项目中的应用。我们将从Kubernetes的容器编排机制入手,逐步探讨如何通过自动化工具实现持续集成与持续部署(CI/CD),最终展示如何构建一个高效、可靠的云原生应用。
26 2
|
13天前
|
Cloud Native Devops 持续交付
云原生技术:构建现代应用的新范式
【10月更文挑战第4天】 在当今数字化时代,云原生技术正迅速成为构建现代应用的主流方法。它不仅改变了开发和部署的方式,还为企业带来了前所未有的灵活性和效率。本文将深入探讨云原生的核心概念、关键技术以及其在实际应用中的优势,揭示这一技术变革背后的本质与内涵。
39 6
|
11天前
|
运维 Cloud Native 持续交付
云原生技术在现代企业中的应用与挑战##
【10月更文挑战第5天】 云原生技术作为云计算领域的前沿趋势,正在迅速改变企业的IT架构和运营模式。本文将探讨云原生的核心概念、主要技术以及其在现代企业中的具体应用和面临的挑战。通过深入分析,我们希望为企业在云原生转型过程中提供有价值的参考和指导。 ##
18 2

热门文章

最新文章