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

简介: 本小节主要讲解从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
相关文章
|
5月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
1327 54
|
6月前
|
机器学习/深度学习 人工智能 运维
智能运维加速交付:应用上线别再慢吞吞
智能运维加速交付:应用上线别再慢吞吞
195 2
|
5月前
|
Cloud Native Serverless API
微服务架构实战指南:从单体应用到云原生的蜕变之路
🌟蒋星熠Jaxonic,代码为舟的星际旅人。深耕微服务架构,擅以DDD拆分服务、构建高可用通信与治理体系。分享从单体到云原生的实战经验,探索技术演进的无限可能。
微服务架构实战指南:从单体应用到云原生的蜕变之路
|
6月前
|
运维 Kubernetes 测试技术
应用多、交付快,研发运维怎么管?看云效+SAE 如何一站式破局
通过在云效中创建 SAE 服务连接并关联集群,团队可将应用环境直接部署到 SAE,实现从代码提交、镜像构建到 SAE 部署的自动化流水线。该集成打通了研发与运维的壁垒,特别适用于应用数量多、团队规模大、交付节奏快的组织,助力企业实现敏捷、可靠的持续交付。
|
6月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
295 8
|
10月前
|
运维 Kubernetes 前端开发
传统企业如何玩转平台工程?2 个运维靠它管 50 + 应用
做了五年运维,最深刻的感悟是:技术自负是效率的天敌。以前总觉得懂 Kubectl 命令才专业,直到被平台工程打脸,真正的专业不是炫技,而是让复杂技术为业务服务。现在我常跟新人说:能让开发和厂商爽的运维,才是好运维,而 Rainbond,就是那个让所有人都爽的神器。
传统企业如何玩转平台工程?2 个运维靠它管 50 + 应用
|
8月前
|
运维 监控 应用服务中间件
运维打铁: Ruby 脚本在运维自动化中的应用探索
Ruby 是一种简洁、动态类型的编程语言,适合运维自动化任务。本文介绍了其在服务器配置管理、定时任务执行和日志分析处理中的应用,并提供了代码示例,展示了 Ruby 在运维自动化中的实际价值。
323 2
|
7月前
|
运维 数据可视化 vr&ar
AR远程协作在发电领域的运维应用方案
发电厂面临设备故障频发、运维人员经验不足、远程支持困难及维护成本高昂等挑战。为提升运维效率与设备可靠性,越来越多电厂开始采用增强现实(AR)远程协作技术。通过AR设备,现场人员可与远程专家实时协作,实现快速故障诊断与修复、可视化操作指导和精准培训支持。AR技术不仅缩短停机时间,降低运维成本,还提升了应急响应能力与决策效率,助力发电行业向智能化、高效化方向发展。
|
7月前
|
人工智能 运维 监控
云+应用一体化可观测:破局“云上困境”,让运维驱动业务增长
当云计算迈入深入上云新阶段,数智化升级的关键课题已从“简单上云”演进至“精细治云”。随着企业对云计算的依赖日益加深,如何高效管理云端资源及其稳定性成为新的挑战。为此,阿里云推出云+应用一体化可观测方案,通过阿里云应用运维平台(Application Operation Platform,简称“AOP”)构建覆盖应用全生命周期一体化可观测产品体系,推动运维模式由被动响应向主动预防转变,实现故障的快速发现、定界与恢复,保障云上业务稳定运行。 目前,该方案已成功服务超过50家行业头部客户,为政务云平台、金融核心系统、能源调度中枢等关键基础设施提供全天候安全运维保障。
439 0
|
12月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
1060 33

热门文章

最新文章

推荐镜像

更多