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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月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的几种状态。

 

 

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
人工智能 运维 监控
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
运维也能“先演练后实战”?聊聊数字孪生的那些神操作
59 0
|
4月前
|
人工智能 运维 安全
基于合合信息开源智能终端工具—Chaterm的实战指南【当运维遇上AI,一场效率革命正在发生】
在云计算和多平台运维日益复杂的今天,传统命令行工具正面临前所未有的挑战。工程师不仅要记忆成百上千条操作命令,还需在不同平台之间切换终端、脚本、权限和语法,操作效率与安全性常常难以兼顾。尤其在多云环境、远程办公、跨部门协作频繁的背景下,这些“低效、碎片化、易出错”的传统运维方式,已经严重阻碍了 IT 团队的创新能力和响应速度。 而就在这时,一款由合合信息推出的新型智能终端工具——Chaterm,正在悄然颠覆这一现状。它不仅是一款跨平台终端工具,更是业内率先引入 AI Agent 能力 的“会思考”的云资源管理助手。
|
12天前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
3月前
|
缓存 运维 安全
7天精通电商API:从接入到运维的完整实战手册
本文全面解析电商API接口技术,从基础概念到高阶应用,涵盖商品、订单、支付与营销等核心模块,并深入探讨性能优化、安全防护与智能化发展方向,助你掌握驱动数字商业的核心技术。
|
4天前
|
数据采集 运维 监控
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
本文系统解析爬虫与自动化核心技术,涵盖HTTP请求、数据解析、分布式架构及反爬策略,结合Scrapy、Selenium等框架实战,助力构建高效、稳定、合规的数据采集系统。
爬虫与自动化技术深度解析:从数据采集到智能运维的完整实战指南
|
6月前
|
人工智能 关系型数据库 OLAP
光云科技 X AnalyticDB:构建 AI 时代下的云原生企业级数仓
AnalyticDB承载了光云海量数据的实时在线分析,为各个业务线的商家提供了丝滑的数据服务,实时物化视图、租户资源隔离、冷热分离等企业级特性,很好的解决了SaaS场景下的业务痛点,也平衡了成本。同时也基于通义+AnalyticDB研发了企业级智能客服、智能导购等行业解决方案,借助大模型和云计算为商家赋能。
461 17
|
6月前
|
消息中间件 存储 NoSQL
RocketMQ实战—6.生产优化及运维方案
本文围绕RocketMQ集群的使用与优化,详细探讨了六个关键问题。首先,介绍了如何通过ACL配置实现RocketMQ集群的权限控制,防止不同团队间误用Topic。其次,讲解了消息轨迹功能的开启与追踪流程,帮助定位和排查问题。接着,分析了百万消息积压的处理方法,包括直接丢弃、扩容消费者或通过新Topic间接扩容等策略。此外,提出了针对RocketMQ集群崩溃的金融级高可用方案,确保消息不丢失。同时,讨论了为RocketMQ增加限流功能的重要性及实现方式,以提升系统稳定性。最后,分享了从Kafka迁移到RocketMQ的双写双读方案,确保数据一致性与平稳过渡。
|
7月前
|
运维 安全 网络安全
【运维实战分享】轻松搞定 SSL 证书管理,告别证书繁琐操作
Spug证书平台的最大亮点之一就是其极为简化的证书申请流程,无论是新手还是经验丰富的运维专家,都可以在几分钟内轻松完成证书的申请,通过微信扫码直接登录申请,无需复杂注册,整个过程既方便又快捷。
186 17
|
8月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。

热门文章

最新文章

推荐镜像

更多