实验一:从 0 开始创建云原生应用 | 学习笔记

简介: 快速学习实验一:从 0 开始创建云原生应用

开发者学堂课程【企业级运维之云原生与 Kubernets 实战课程:从 0 开始创建云原生应用 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/913/detail/14601


从 0 开始创建云原生应用


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

 

一、实验简介

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

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

实验地址: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 源,使用阿里云的 mirror 的 docker-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 '<h1> Hello Kubernetes ! </h1>' > index.html创建一个静态页面。

' > 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

(3)push 镜像到容器镜像服务

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 状态是否正常,测试通过负载均衡类型的 service 的 slb 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 云资源,可以 ssh 到 K8s 资源,按照实验手册进行安装docker 环境,然后是拉取镜像、创建 Deployment、创建服务。

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

 

四、其他内容回顾

1. 容器在宿主机上的体现方式(pid,cgroup)

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

2. Pod 怎么在宿主机上体现?(cgroup,kubelet)

Ÿ 登录 K8s 集群,执行 kubectl  get  pod -o wide 查看 Pod 所在的节点信息,然后 ssh 到该节点上,如果是 lpvs 集群可以通过 lpvsadm -Ln 命令查看转发规则。

Ÿ 在 master 节点上执行 kubectl get pod xxx ( Pod 服务名) -o yaml,以yaml 文件的方式输出 Pod 服务信息,可以查到 Pod 的 uid,那么 Pod 在宿主机上如何体现呢?

Ÿ 登录该 Pod 所在的 worker 节点上,进入 cgroup 目录,查看 cgroup 目录下文件信息:

cd /sys/fs/cgroup/

ls -lrth

Ÿ 然后进入 cpu 目录,查看 cpu 下目录文件信息,可以看到文件 kubepods.slice,进入该目录可以看到 kubepods-burstable.slice和kubepods-besteffort.slice,进入 kubepods-burstable.slice 目录下可以看到在 master 节点上查到的 Pod 的 uid ,这是容器在宿主机上以 cgroup 的体现方式。

Ÿ 登录该 Pod 所在的 worker 节点上进入 /var/lib/kubelet/pods 目录可以看到在 master 节点上查到的 Pod 的 uid,这是容器在宿主机上以 kubelet 的体现方式。

3. Pod 的几种状态

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

Ÿ Starting:Pod 启动中。

Ÿ Evcited:Pod 退出的状态。

 

五、阶段小结

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

2. K8s 基本模块,worker:kubelet、kube-proxy,master 组件的作用及联系。

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

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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2月前
|
消息中间件 人工智能 安全
云原生进化论:加速构建 AI 应用
本文将和大家分享过去一年在支持企业构建 AI 应用过程的一些实践和思考。
580 42
|
3月前
|
存储 弹性计算 Cloud Native
云原生数据库的演进与应用实践
随着企业业务扩展,传统数据库难以应对高并发与弹性需求。云原生数据库应运而生,具备计算存储分离、弹性伸缩、高可用等核心特性,广泛应用于电商、金融、物联网等场景。阿里云PolarDB、Lindorm等产品已形成完善生态,助力企业高效处理数据。未来,AI驱动、Serverless与多云兼容将推动其进一步发展。
213 8
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
328 13
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战####
本文探讨了云原生技术在现代企业IT架构中的关键作用,分析了其带来的优势和面临的主要挑战。通过实际案例分析,揭示了如何有效应对这些挑战,以实现业务敏捷性和技术创新的平衡。 ####
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
8月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
473 12
|
Kubernetes Cloud Native 物联网
云原生技术在现代软件开发中的应用与挑战####
本文探讨了云原生技术的兴起背景、核心理念及其在现代软件开发中的广泛应用。通过具体案例分析,揭示了云原生架构如何促进企业数字化转型,并指出了在实施过程中面临的主要挑战及应对策略。 ####
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
Kubernetes Cloud Native Devops
云原生技术在现代软件开发中的应用与挑战####
云原生,这一词汇如同云计算浪潮中的灯塔,引领着技术革新的方向。本文旨在探讨云原生技术的核心概念、关键组件及其在现代软件开发中的实践应用,同时剖析面临的挑战与应对策略。通过深入分析Kubernetes、微服务架构、DevOps文化等要素,揭示云原生如何赋能企业实现高效、弹性的IT系统构建,并展望其未来发展趋势。 ####
139 27
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。

热门文章

最新文章