使用yaml文件创建deployment来部署一个应用程序到k8s集群
作者: wucong60
原文: https://blog.csdn.net/wucong60/article/details/81586272
系列链接
Kubernetes系列之一:在Ubuntu上快速搭建一个集群Demo
Kubernetes系列之二:将Slave节点加入集群
Kubernetes系列之三:部署你的第一个应用程序到k8s集群
Kubernetes系列之四:使用yaml文件创建deployment来部署一个应用程序到k8s集群
Kubernetes系列之五:使用yaml文件创建service向外暴露服务
Kubernetes系列之六:安装k8s通用的Web UI(Dashboard)
Kubernetes系列之N:使用K8s遇到的问题
目的
从零开始开发一个超小的应用,将它打包成一个image,利用yaml文件部署到kube集群中。
具体的思路是:在开发环境中,打算创建一个node.js应用程序,因为使用它可以让我的程序足够简单,然后使用dockerfile去创建一个docker image,再将它push到docker registry中去;接着使用yaml文件将此image部署到已经搭建好的kube集群中。
创建一个nodejs应用程序
创建一个文件夹kube-demo, 在编辑器(笔者使用vscode)中打开,接着创建一个server.js文件
var http = require('http');var handleRequest = function(request, response) {console.log('Received request for URL: ' + request.url);response.writeHead(200);response.end('Hello World!');
};
var www = http.createServer(handleRequest);
www.listen(8081);
运行应用:
node server.js
打开浏览器访问http://localhost:8081,得到的结果如下:
可以看到我们的小应用程序可以正常运行,使用按Ctrl+C停止正在运行的Node.js服务器
将应用程序打包成Docker镜像并Push到Docker hub上去
接下来我们将此应用程序打包成Docker 镜像,这里使用Dockerfile来进行打包,如果看到这里你不太明白,那么你需要先学习一下Docker. Dockerfile的内容如下:
FROM node:8.11.2
WORKDIR app
COPY . .
EXPOSE 8081
ENTRYPOINT [ "node","server.js" ]
Dockerfile创建好后,执行如下命令
docker build -t wucong60/kube-node-demo1:v1 .
运行docker images,可以看到镜像打包成功了
root@Kube-Dev:/home/cong/Desktop/NodeDemo1# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wucong60/kube-node-demo1 v1 e2522bf8e003 1 hours ago 673 MB
执行docker login --username <你在dockerhub注册的账号> 再输入密码登录到docker hub,再将刚打包好的镜像push上去
root@kube-dev:/home/cong/Desktop/NodeDemo1# docker login --username wucong60
Password:
Login Succeededroot@kube-dev:/home/cong/Desktop/NodeDemo1# docker push wucong60/kube-node-demo1:v1
The push refers to a repository [docker.io/wucong60/kube-node-demo1]
3f17035e6c72: xxxxx
.....
v1: digest: sha256:009219456e793f3b53b777915247c71635b9c5bec6e70de6ab1f08664d056917 size: 2420
这时,所有人都可以从docker hub(公有镜像库)中拉取此镜像了。
使用yaml文件创建Deployment
创建一个名为deployment.yaml的yaml文件,内容如下:
---apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: kube-nodespec:replicas: 2template:metadata:labels:app: webspec:containers:- name: kube-node-demo-instanceimage: wucong60/kube-node-demo1:v1ports:- containerPort: 8081
执行kubectl create -f deployment.yaml命令,创建一个deployment
root@kube-master:/home/cong/Desktop/NodeDemo1# kubectl create -f deployment.yaml
deployment.extensions/kube-node created
root@kube-master:/home/cong/Desktop/NodeDemo1# kubectl get pods
NAME READY STATUS RESTARTS AGE
kube-node-59bf664cbf-2qzgd 0/1 ImagePullBackOff 0 9s
kube-node-59bf664cbf-p6wtg 0/1 ImagePullBackOff 0 9s
结果发现Pods的状态为ImagePullBackOff, 最终发现是,因为k8s不能够拉取私有仓库的镜像,通过执行下列命令可以查看具体的Pod信息,其中里面的Events下面显示了创建Pod的详细过程。
kubectl describe pods/kube-node-59bf664cbf-2qzgd
参考Kubernetes配置secret拉取私有仓库镜像的官方文档后(点击这里查看),执行如下命令
root@kube-master:/home/cong/Desktop/NodeDemo1# kubectl create secret docker-registry myregistrykey --docker-server=https://index.docker.io/v1/ --docker-username=wucong60 --docker-password=xxxx--docker-email=xxxx@qq.comroot@kube-master:/home/cong/Desktop/NodeDemo1# kubectl get secrets
NAME TYPE DATA AGE
default-token-2lvth kubernetes.io/service-account-token 3 4d
myregistrykey kubernetes.io/dockerconfigjson 1 4h
这样我们就创建好了secret,然后再将这个secret加到yaml文件中,修改后的deployment.yaml文件如下:
---apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: kube-nodespec:replicas: 2template:metadata:labels:app: webspec:containers:- name: kube-node-demo-instanceimage: kube-node-demo1ports:- containerPort: 8081imagePullSecrets:- name: myregistrykey
删除之前的deployment并重新创建新的deployment(另一方法是 :直接编辑此deployment,命令是:kubectl edit deployments/kube-node,编辑完后就立即生效了,所有pods会重新生成),命令如下:
kubectl delete deployments/kube-nodekubectl create -f deployment.yaml
最终可以看到我们的应用程序被部署上去了执行下列命令,来验证部署上去的应用程序是否好用,我们尝试访问第一个IP+8081端口,正常显示Hello World!
root@kube-master:/home/cong/Desktop/NodeDemo1# curl 10.244.2.66:8081
Hello World!
到这里,我们的应用程序部署成功了。接下来我们要创建一个service来供外部来访问我们的应用程序,请见下篇
使用yaml文件创建deployment来部署一个应用程序到k8s集群相关推荐
- 手把手教你部署一个最小化的 Kubernetes 集群
虽然网上有大量从零搭建 K8S 的文章,但大都针对老版本,若直接照搬去安装最新的 1.20 版本会遇到一堆问题.故此将我的安装步骤记录下来,希望能为读者提供 copy and paste 式的集群搭建 ...
- Centos7.2部署HOR2.2(基于K8S集群的容器应用整合)
一. 部署本地yum源 二. 前置环境准备 1.配置主机名和hosts文件(每个节点) (1)hostnamectl set-hostname xxx (2)编辑各节点/etc/hosts文件,修改对 ...
- 使用kubeadm快速部署一套稳定的K8S集群
文章目录 一. 操作系统初始化配置 1.1 设置主机名 1.2 设置hosts解析主机名 1.3 关闭SELinux和防火墙 1.4 关闭swap 1.5 设置系统参数 1.6 设置节点间的SSH免密 ...
- 使用 K3s 和 WireGuard 网络快速部署一个多云环境的 Kubernetes 集群
公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 每日言论 SQLite 的应用太广泛,测试量也很惊人.每个版本发布之前,都要进行各种单元测试.参数测试.模糊测试, ...
- 京东云开发者|IoT运维 - 如何部署一套高可用K8S集群
环境 准备工作 配置ansible(deploy 主机执行) # ssh-keygen # for i in 192.168.3.{21..28}; do ssh-copy-id -i ~/.ssh/ ...
- K8S_Google工作笔记0004---平台规划和部署方式介绍_搭建k8s集群准备
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152. 按照上面3个部分来说明 先说这个但master集群,也就是说master这个节点,用来管理其他的 ...
- [错误解决]centos中使用kubeadm方式搭建一个单master的K8S集群
安装步骤 参考该大佬博客 --------- [ningan@k8s-master pv]$ kubectl get pod The connection to the server localhos ...
- 项目四 CentOS使用kubeadm部署工具部署测试环境的K8s集群---Kubectl命令使用以及安装dashboard界面
大家好,我是SuieKa.在之前呢有幸学习了马哥教育提供的K8s入门指南以及视频.初来乍到,写一篇关于K8s的介绍以及部署测试环境使用的K8s集群. 树 @·K8s入门简单介绍 一.K8s(Kuber ...
- 使用containerd和cilium部署kubeproxy-free的k8s集群
1.准备工作 1.1 集群信息 机器均为8C8G的虚拟机,硬盘为100G. IP Hostname 10.31.18.1 tiny-kubeproxy-free-master-18-1.k8s.tci ...
最新文章
- 每天超50亿推广流量、3亿商品展现,阿里妈妈的推荐技术有多牛?
- knime如何连接mysql_knime怎么连接MySQL?
- 好久不更新这个博客了。
- 0202年了,怎么还这么多人不会搜索
- 飞龙的程序员书单 – 数据结构、算法
- 飞思卡尔16位单片机(四)——GPIO输入功能测试
- Win10系统离线安装可选功能XPS查看器(XPS Viewer)的详细说明(修订版)
- SATI统计分析文献--以关键词为例
- 常用的几个设计心理学
- 从总线式以太网到SDN交换机OpenVSwitch
- Python3.8场景式编程学习与训练- 第1章 入门基础 沙箱技术与虚拟环境创建
- test.java_test JavaWeb开发的试题库管理系统。包括用户 、 、试卷生成及增删改查等。 Develop 256万源代码下载- www.pudn.com...
- linux中脚本都是.sh吗,Linux跑脚本用sh和./有什么区别?
- snaker流程预览
- MySQL Workbench 类似Navicat侧边栏查表名
- JS判断输入的字符串是否是数字(正则表达式)
- 【FME】矢量间进行空间传值、属性关联
- 《圈外课程学习记录》1.1结构化的特征 1.2表达时主题先行
- 武汉纺织大学计算机科学校区在哪,武汉纺织大学是一本吗 重点专业是什么 有几个校区及校区地址...
- 全球与中国植物培养箱市场现状及未来发展趋势(2022)
热门文章
- iphone个人热点无法开启_iPhone无法开启个人热点怎么回事【解决方法】
- 浅谈js与jq给新增元素动态绑定事件(事件委托)
- 洛谷——[USACO07OCT]Bessie‘s Secret Pasture S
- 模型相关:SolidWorks按实际比例创建模型,在Unity中保持尺寸不变
- springboot热部署与发布
- python正则_python中正则匹配
- Windows 下的坐标系
- 开源大数据周刊-第22期
- 网络安全管理的“模拟人生”
- Oracle 写存储过程的一个模板还有一些基本的知识点