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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 本小节主要讲解从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的几种状态。

 

 

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
21天前
|
运维 Kubernetes 监控
揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
揭秘高效运维:如何用kubectl top命令实时监控K8s资源使用情况?
23 0
|
22天前
|
机器学习/深度学习 运维 监控
智能监控系统在运维中的应用与优势
传统的运维管理方式在面对日益复杂的IT系统时显得力不从心,智能监控系统的出现为运维工作带来了新的机遇。本文将探讨智能监控系统在运维中的应用与优势,介绍其工作原理以及如何有效地利用智能监控系统提升运维效率和质量。
37 2
|
22天前
|
运维 监控
现代运维中的自动化技术应用与挑战
现代运维工作中,自动化技术的应用已成为提高效率、降低成本的重要手段。本文探讨了自动化技术在运维领域的应用现状和挑战,包括自动化工具的选择、实施过程中的注意事项以及未来发展趋势。通过深入分析,帮助读者更好地理解和应用自动化技术,提升运维工作效率。
12 2
|
1月前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
22天前
|
运维 Kubernetes 容器
K8S运维命令必备kubectl命令总结
K8S运维命令必备kubectl命令总结
24 3
|
1月前
|
机器学习/深度学习 人工智能 运维
《未来智能运维:AI技术的应用与展望》
在当今数字化时代,智能运维正日益成为企业提升效率、降低成本的关键。本文将探讨人工智能技术在运维领域的应用现状与未来发展趋势,展望未来智能运维的发展前景。
59 1
|
24天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
24天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
38 0
|
27天前
|
运维 监控 数据可视化
现代化运维管理系统的关键特性及实践应用
随着信息技术的迅猛发展,现代企业对于运维管理系统的需求日益增长。本文将探讨现代化运维管理系统的关键特性,以及在实际应用中的重要性和优势所在,帮助企业更好地理解和应用现代化运维管理系统。
14 2
|
27天前
|
机器学习/深度学习 人工智能 运维
未来智能运维:人工智能在云计算运维中的应用
随着云计算技术的不断发展,传统的运维方式已经无法满足日益复杂的系统需求。本文探讨了人工智能在云计算运维中的应用,介绍了未来智能运维的发展趋势和挑战。
15 3