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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习实验一:从 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 的几种状态。

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
Cloud Native 数据处理 云计算
探索云原生技术在大数据分析中的应用
随着云计算技术的不断发展,云原生架构作为一种全新的软件开发和部署模式,正逐渐引起企业的广泛关注。本文将探讨云原生技术在大数据分析领域的应用,介绍其优势与挑战,并探讨如何利用云原生技术提升大数据分析的效率和可靠性。
|
1月前
|
Cloud Native Devops 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【2月更文挑战第31天】 随着数字化转型的加速,云原生技术已经成为推动企业IT架构现代化的关键力量。本文深入探讨了云原生架构的核心组件、实施策略以及面临的主要挑战。通过分析容器化、微服务、DevOps和持续集成/持续部署(CI/CD)等关键技术,揭示了如何利用这些技术实现敏捷性、可扩展性和弹性。同时,文章还讨论了企业在采纳云原生实践中可能遇到的安全性、复杂性和文化适应性问题,并提供了解决这些问题的策略和建议。
|
16天前
|
Cloud Native 安全 开发者
云原生技术的未来演进与应用展望
【4月更文挑战第9天】 随着企业数字化转型的不断深入,云原生技术以其独特的弹性、敏捷性和可扩展性成为推动创新的重要力量。本文将探讨云原生技术的发展趋势,分析其在各行各业中的应用前景,并针对未来的挑战提出相应的对策和建议。我们还将讨论如何利用云原生技术优化资源配置,提高业务连续性,并最终实现企业的技术升级和价值增长。
|
1月前
|
运维 Cloud Native 云计算
未来趋势:云原生技术在后端开发中的应用
随着云计算技术的快速发展,云原生技术作为一种新兴的软件架构理念,在后端开发领域日益受到关注。本文将探讨云原生技术的基本概念、优势以及在后端开发中的应用,展望未来云原生技术对于软件开发的影响和发展趋势。
|
6天前
|
Kubernetes Cloud Native Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(下)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
40 0
|
6天前
|
Cloud Native 算法 Go
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)(上)
《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)
31 0
|
12天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
16 4
|
15天前
|
运维 Cloud Native 持续交付
构建未来:云原生架构在现代企业中的应用与挑战
【4月更文挑战第10天】 随着数字化转型的不断深入,企业对信息技术基础设施的要求日益提高。云原生架构作为一种新兴的设计理念和技术集合,以其灵活性、可扩展性和容错性,正在成为推动企业技术革新的关键力量。本文将探讨云原生技术的核心组件、实施策略以及面临的主要挑战,并分析如何通过采纳云原生架构来优化业务流程和提升服务效率。
|
23天前
|
人工智能 Cloud Native 物联网
探索云原生技术的发展趋势与应用前景
在当今数字化时代,云原生技术已经成为企业数字化转型的核心驱动力之一。本文将深入探讨云原生技术的发展趋势和应用前景,分析其在大数据、人工智能、物联网等领域的应用,并探讨未来可能的发展方向。
12 1
|
24天前
|
运维 Cloud Native 云计算
云原生技术:构建灵活高效的应用生态
随着云计算技术的不断发展,云原生技术作为一种全新的应用开发和部署模式,正逐渐成为业界关注的焦点。本文将介绍云原生技术的基本概念、优势以及在构建灵活高效的应用生态方面的应用实践,以期为读者提供全面了解云原生技术的视角。

热门文章

最新文章