企业级运维之云原生与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的几种状态。

 

 

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
缓存 Kubernetes Docker
GitLab Runner 全面解析:Kubernetes 环境下的应用
GitLab Runner 是 GitLab CI/CD 的核心组件,负责执行由 `.gitlab-ci.yml` 定义的任务。它支持多种执行方式(如 Shell、Docker、Kubernetes),可在不同环境中运行作业。本文详细介绍了 GitLab Runner 的基本概念、功能特点及使用方法,重点探讨了流水线缓存(以 Python 项目为例)和构建镜像的应用,特别是在 Kubernetes 环境中的配置与优化。通过合理配置缓存和镜像构建,能够显著提升 CI/CD 流水线的效率和可靠性,助力开发团队实现持续集成与交付的目标。
|
2月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
|
2月前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战####
本文探讨了云原生技术在现代企业IT架构中的关键作用,分析了其带来的优势和面临的主要挑战。通过实际案例分析,揭示了如何有效应对这些挑战,以实现业务敏捷性和技术创新的平衡。 ####
|
7天前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
ACK One注册集群已正式支持ACS(容器计算服务)算力,为企业的容器化工作负载提供更多选择和更强大的计算能力。
|
2月前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
1天前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
|
29天前
|
存储 监控 对象存储
ACK 容器监控存储全面更新:让您的应用运行更稳定、更透明
针对本地存储和 PVC 这两种容器存储使用方式,我们对 ACK 的容器存储监控功能进行了全新升级。此次更新完善了对集群中不同存储类型的监控能力,不仅对之前已有的监控大盘进行了优化,还针对不同的云存储类型,上线了全新的监控大盘,确保用户能够更好地理解和管理容器业务应用的存储资源。
117 21
|
1月前
|
存储 监控 对象存储
ACK容器监控存储全面更新:让您的应用运行更稳定、更透明
介绍升级之后的ACK容器监控体系,包括各大盘界面展示和概要介绍。
|
2月前
|
Kubernetes Cloud Native 物联网
云原生技术在现代软件开发中的应用与挑战####
本文探讨了云原生技术的兴起背景、核心理念及其在现代软件开发中的广泛应用。通过具体案例分析,揭示了云原生架构如何促进企业数字化转型,并指出了在实施过程中面临的主要挑战及应对策略。 ####
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
178 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档