企业级运维之云原生与Kubernetes实战课程 - 第一章第7讲 实验一:从0开始创建云原生应用

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 本小节主要讲解从0开始创建云原生应用的实验部分,以及Pod的几种状态、Pod在宿主机上体现方式。

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

第一章第7讲 实验一:从0开始创建云原生应用

 

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

 

摘要:本小节主要讲解从0开始创建云原生应用的实验部分,以及Pod的几种状态、Pod在宿主机上体现方式。

 

一、实验简介

 

将一个web应用进行容器化改造,制作好容器镜像,通过deployment部署到K8s,副本数为2,使用负载均衡类型的service把应用暴露到公网,通过公网访问到web应用。

 

实验目标:掌握容器镜像制作、deployment部署、service使用。该实验是“云原生与Kubernetes基础课程”的配套实验,实验前需熟悉上述理论概念,建议完成配套理论课程学习。

 

实验地址:https://developer.aliyun.com/adc/scenario/ea62728855c841e29536335b8954fd5a

 

二、实验步骤

 

1.  了解实验架构

 

实验之前需要理解相关理论概念,然后了解整体的实验架构。

 image.png

 

2.  实验准备

 

注:后台已创建好了对应的云产品资源,这里仅核实环境和相关配置。

 

a.  核实后台已经创建好的阿里云托管版ACK集群,已经部署好了nginx-ingress-controller组件,已经部署好了logtail组件(默认勾选了“使用日志服务”, 选择创建了新的Project)。

 image.png

 

b.  后台提供了一台本地机器(如centos7.6的服务器),现需要安装docker-ce,用于镜像制作。(可直接使用集群节点,省略安装docker步骤)

 

安装docker-ce具体步骤:

 

1)添加docker-ce yum源,使用阿里云的mirrordocker-ce仓库

 

yum install -y yum-utils //扩展yum功能

yum-config-manager --add-

repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo //添加软件源信息

yum makecache //自动选择最快yum仓库源

 

2)查看当前可以安装的docker-ce版本

 

yum list docker-ce --showduplicates | sort -r

 image.png

 

yum -y install docker-ce-[VERSION] //安装指定版本的格式

yum install -y docker-ce-19.03.5-3.el7

 

3)启动测试

 

systemctl start docker

docker info

docker version

 image.png

 

c.  可使用ack里面的Cloud Shell进行连接以配置管理集群。

 image.png

 

d.  保证开通了阿里云容器镜像服务,创建好了容器镜像服务的namespace和本地仓库。

 

具体操作可参考文档:https://help.aliyun.com/document_detail/198212.html

 

3.  拉取nginx基础镜像,创建一个静态index.html页面,编写dockerfile进行容器镜像制作。

 

a.  在有docker 环境的机器里,使用 docker pull nginx 命令拉取 nginx 镜像作为基础镜像。

 image.png

 

b.  创建一个静态index.html 页面。

 

使用命令 mkdir -p /root/image_build_dir 创建一个用来构建镜像的目录;

cd /root/image_build_dir 进入目录;

使用命令:echo '

Hello Kubernetes !

' > index.html 创建一个静态页面。

 

c.  编写dockerfile 文件进行容器镜像制作。

 

使用vi命令创建一个Dockerfile 文件,注意大小写,保存并退出。内容如下:

 image.png

 

执行命令制作容器镜像;

 

docker build -t web:latest . (注意最后有一个空格和英文句号 “.”,代表容器构建目录为当前目录。)

 image.png

 

docker images|grep web

 

查看刚制作好的容器镜像,按照如下操作将本地镜像推送到容器镜像服务:

 

1)登陆容器镜像服务 docker login --username=g****t registry.cn-hangzhou.aliyuncs.com

 

仓库密码可以在阿里云容器镜像服务控制台页面,实例列表->个人实例->访问凭证 设置固定密码。

 

2)修改镜像tag标签 docker tag web:latest registry.cn-hangzhou.aliyuncs.com/mubin/zuorong:v1

 

3push镜像到容器镜像服务

 

docker push registry.cn-hangzhou.aliyuncs.com/mubin/zuorong:v1

 

注意:registry.cn-hangzhou.aliyuncs.com/mubin/zuorong:v1需要替换为从容器镜像服务控制台拿到的地址,参考下图:

 image.png

 

4.  使用上述步骤获取的镜像来建应用和service

 

在部署好kubectl机器上执行命令:kubectl create -f /root/test.yaml

 

/root/test.yaml内容如下,这个yaml内包含2个资源,一个是deployment应用,另一个是用来把应用暴露到公网的service,两个资源使用 --- 来分割。

如果之前步骤创建的仓库类型是私有,建议改为公开即可直接拉取镜像创建应用,否则还需要为应用创建仓库密钥才能正常拉取镜像。

 

具体步骤参考文档:

https://help.aliyun.com/document_detail/128457.html?spm=5176.21213303.J_6704733920.7.44193edaOCKcbh&scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%40128457.S_hot%2Bos0.ID_128457-RL_imagePullSecrets-OR_helpmain-V_2-P0_0#title-ngj-14m-bwx

 

apiVersion: apps/v1

kind: Deployment

metadata:

 name: web

spec:

progressDeadlineSeconds: 600

 replicas: 2

revisionHistoryLimit: 10

 selector:

   matchLabels:

     app: web

     version: v1

 strategy:

  rollingUpdate:

     maxSurge: 25%

    maxUnavailable: 25%

   type: RollingUpdate

 template:

   metadata:

     labels:

       app: web

       version: v1

   spec:

    containers:

       - image: 'registry.cn-hangzhou.aliyuncs.com/mubin/zuorong:v1'

        imagePullPolicy: IfNotPresent

         name: web

         ports:

         - containerPort: 80

          protocol: TCP

        resources: {}

        terminationMessagePath: /dev/termination-log

        terminationMessagePolicy: File

     dnsPolicy: ClusterFirst

     restartPolicy: Always

    schedulerName: default-scheduler

    securityContext: {}

    terminationGracePeriodSeconds: 30

---

apiVersion: v1

kind: Service

metadata:

 name: web-svc

spec:

externalTrafficPolicy: Local

 ports:

 - name: http-80

   port: 80

   protocol: TCP

   targetPort: 80

 selector:

   app: web

sessionAffinity: None

 type: LoadBalancer

 

5.  检查pod状态是否正常,测试通过负载均衡类型的serviceslb ip+端口访问是否正常。

 

Kubectl get pod 查看web pod是否是running的;

Kubectl get svc 查看web-svc的扩展ip(下图的EXTERNAL-IP扩展ip),测试请求情况;

 image.png

 

curl 扩展ip:80,或直接通过浏览器打开扩展ip地址来访问;

 image.png

image.png

 

三、实验小结

 

登录云原生应用实验地址,创建资源,等待完成资源创建后,可以看到已创建好的云产品K8s资源、ECS云资源,可以sshK8s资源,按照实验手册进行安装docker环境,然后是拉取镜像、创建Deployment、创建服务。

 

通过dockerfile创建镜像,编写dockerfile文件,然后执行docker build命令创建镜像,执行docker push推送到在阿里平台创建的镜像仓库中,执行kubectl apply -f xxx.yamlxxxdocker文件名),通过kubectl get pod命令可以查看到创建好了Pod应用,通过kubectl get svc查看对外暴露的IP地址,如果是Loadbalancer类型,可以通过浏览器访问测试该地址。

 

四、其他内容回顾

 

1. 容器在宿主机上的体现方式(pidcgroup

 

这种方式已在前面讲解过。

 

2. Pod怎么在宿主机上体现?(cgroupkubelet

 

  • 登录K8s集群,执行kubectl  get pod -o wide查看Pod所在的节点信息,然后ssh到该节点上,如果是lpvs集群可以通过lpvsadm -Ln命令查看转发规则。
  • master节点上执行kubectl get pod xxx(Pod服务名) -o yaml,以yaml文件的方式输出Pod服务信息,可以查到Poduid,那么Pod在宿主机上如何体现呢?
  • 登录该Pod所在的worker节点上,进入cgroup目录,查看cgroup目录下文件信息:

cd /sys/fs/cgroup/

ls -lrth

  • 然后进入cpu目录,查看cpu下目录文件信息,可以看到文件kubepods.slice,进入该目录可以看到kubepods-burstable.slicekubepods-besteffort.slice,进入kubepods-burstable.slice目录下可以看到在master节点上查到的Poduid,这是容器在宿主机上以cgroup的体现方式。
  • 登录该Pod所在的worker节点上进入/var/lib/kubelet/pods目录可以看到在master节点上查到的Poduid,这是容器在宿主机上以kubelet的体现方式。

 

3. Pod的几种状态

 

  • kill:被动的方式可能原因是node节点资源不足,网络中断等,也可能是主动方式被kill掉,比如更新deployment、更新镜像、主动调度等,假如某个节点上有3deployment创建的Pod,现需要将3Pod驱逐,会导致应用挂掉,而PDB可以限制Pod中断数量,来保障应用的高可用。
  • StartingPod启动中。
  • EvcitedPod退出的状态。

 

五、阶段小结

 

1.  容器的基本概念、容器与K8s、虚拟机的区别,docker基本命令,容器在宿主机上的显示。

2.  K8s基本模块,workerkubeletkube-proxymaster组件的作用及联系。

3.  Controller类型及使用场景,SVC类型(iptables/ipvs)及区别,存储类型及使用方式。

4.  Pod在宿主机的体现方式、Pod的几种状态。

 

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
24 2
|
1月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【10月更文挑战第2天】本文将带你走进云原生的世界,从基础的Docker容器技术开始,逐步深入到Kubernetes集群管理。我们将通过实际代码示例,探索如何利用这些工具构建、部署和管理现代云应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的知识和技能,让你在云原生领域迈出坚实的一步。
83 5
|
6天前
|
存储 Cloud Native 块存储
EBS深度解析:云原生时代企业级块存储
企业上云的策略,从 Cloud-Hosting 转向 Serverless 架构。块存储作为企业应用上云的核心存储产品,将通过 Serverless 化来加速新的计算范式全面落地。在本话题中,我们将会介绍阿里云块存储企业级能力的创新,深入解析背后的技术细节,分享对未来趋势的判断。
|
5天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
24 1
|
10天前
|
运维 Kubernetes Cloud Native
Kubernetes云原生架构深度解析与实践指南####
本文深入探讨了Kubernetes作为领先的云原生应用编排平台,其设计理念、核心组件及高级特性。通过剖析Kubernetes的工作原理,结合具体案例分析,为读者呈现如何在实际项目中高效部署、管理和扩展容器化应用的策略与技巧。文章还涵盖了服务发现、负载均衡、配置管理、自动化伸缩等关键议题,旨在帮助开发者和运维人员掌握利用Kubernetes构建健壮、可伸缩的云原生生态系统的能力。 ####
|
11天前
|
存储 运维 Kubernetes
云原生之旅:Kubernetes的弹性与可扩展性探索
【10月更文挑战第32天】在云计算的浪潮中,云原生技术以其独特的魅力成为开发者的新宠。本文将深入探讨Kubernetes如何通过其弹性和可扩展性,助力应用在复杂环境中稳健运行。我们将从基础架构出发,逐步揭示Kubernetes集群管理、服务发现、存储机制及自动扩缩容等核心功能,旨在为读者呈现一个全景式的云原生平台视图。
23 1
|
16天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
47 4
|
16天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
49 3
|
21天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
32 3
|
19天前
|
运维 Kubernetes Cloud Native
云原生入门:Kubernetes和容器化的未来
【10月更文挑战第23天】本文将带你走进云原生的世界,探索Kubernetes如何成为现代软件部署的心脏。我们将一起揭开容器化技术的神秘面纱,了解它如何改变软件开发和运维的方式。通过实际的代码示例,你将看到理论与实践的结合,感受到云原生技术带来的革命性影响。无论你是初学者还是有经验的开发者,这篇文章都将为你开启一段新的旅程。让我们一起踏上这段探索之旅,解锁云原生技术的力量吧!