应无所住,而生其心
排名
1
文章
860
粉丝
112
评论
163
net core webapi post传递参数
庸人 : 确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术

部署应用到k8s集群

4870人阅读 2022/6/3 18:25 总访问:5182535 评论:1 收藏:0 手机
分类: K8S

部署一个简单的应用

使用Deployment部署:

创建一个app.yaml

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. # 部署名字
  5. name: test-k8s
  6. spec:
  7. replicas: 2
  8. # 用来查找关联的 Pod,所有标签都匹配才行
  9. selector:
  10. matchLabels:
  11. app: test-k8s
  12. # 定义 Pod 相关数据
  13. template:
  14. metadata:
  15. labels:
  16. app: test-k8s
  17. spec:
  18. # 定义容器,可以多个
  19. containers:
  20. - name: test-k8s # 容器名字
  21. image: ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v1 # 镜像

部署:

  1. kubectl apply -f app.yaml

Deployment 通过 label 关联起来 Pods

查看pod运行状态:

  1. kubectl get pod

详细一点的:

  1. kubectl get pod -o wide

效果如下:

还可以使用如下命令查看 deployment

  1. kubectl get deployment

如果跑起来后ready运行状态没有启动起来可以使用下面的方法查看pod详情

查看pod详情:

kubectl describe pod/pod-name

报错:open /run/flannel/subnet.env: no such file or directory

在每个节点创建文件/run/flannel/subnet.env写入以下内容

  1. FLANNEL_NETWORK=10.244.0.0/16
  2. FLANNEL_SUBNET=10.244.0.1/24
  3. FLANNEL_MTU=1450
  4. FLANNEL_IPMASQ=true
然后删除运行的deployment:

kubectl delete deployment test-k8s

删除之后重新执行命令:
  1. kubectl apply -f app.yaml


也不一定非要删除deployment重新执行命令创建Pod,可以等一会看看状态是否正常,如果正常了,就不需要删除后,重新创建了。特别是本地虚拟机创建的测试环境,以前创建过一次这个文件,因为某些原因,重新啥的造成的文件不存在了,创建一下等一会就好了,不要删除后重新创建。还有要注意是每个节点都需要创建哦,不是单个,具体使用kubectl describe pod/pod-name查看错误详情。

报错: /run/flannel/subnet.env is missing FLANNEL_NETWORK, FLANNEL_IPV6_NETWORK

其实也是subnet.env文件配置错了,复制内容的时候复制错了就会出现这种错误。具体可以查看
https://www.tnblog.net/aojiancc2/article/details/7357

pod运行成功效果如下

进行端口映射,让外部可以访问

  1. kubectl port-forward pod/pod-name 8080:8080


这样可能会出现只能localhost访问无法外部访问的问题,可以使用下面的方法解决

无法访问虚拟机8080问题

虚拟机跑上了,本地能使用curl访问,但是宿主机使用虚拟机的ip+端口访问不到。


localhost是只能本地端口访问,把监听地址改成0.0.0.0就可以了

在做端口映射的时候增加一个—address 把地址加一下就可以了

  1. kubectl port-forward --address 0.0.0.0 pod/pod-name 8080:8080

address 0.0.0.0 K8S会监听任何地址就没有问题了

当然如果还不行的话可以考虑一下部署的应用本身的ip地址与端口问题
比如下面的一个简单的nodejs服务监听。
localhost是只能本地端口访问,把监听地址改成0.0.0.0就可以外部访问了。当然一般只需要在端口映射的时候设置address 0.0.0.0就行了,不行的话才去考虑部署的应用本身的访问限制。

  1. // 监听地址不要写成127.0.0.1或者localhost
  2. var server = app.listen(8081, '127.0.0.1', function () {
  3. var host = server.address().address;
  4. var port = server.address().port;
  5. console.log("地址为 http://%s:%s", host, port);
  6. });
  7. //监听地址写成0.0.0.0
  8. var server = app.listen(8081, '0.0.0.0', function () {
  9. var host = server.address().address;
  10. var port = server.address().port;
  11. console.log("地址为 http://%s:%s", host, port);
  12. });

查看pod运行日志

kubectl logs pod/pod-name

部署nginx应用

部署命令:

  1. kubectl run nginx --image=nginx:latest

转发一下,让外部可以访问:

  1. kubectl port-forward --address 0.0.0.0 pod/nginx 80:80 #将本机80端口转发至Pod的80端口

常用命令

  1. # 部署应用
  2. kubectl apply -f app.yaml
  3. # 查看 deployment
  4. kubectl get deployment
  5. # 查看 pod
  6. kubectl get pod -o wide
  7. # 查看 pod 详情
  8. kubectl describe pod pod-name
  9. # 查看 log
  10. kubectl logs pod-name
  11. # 查询pod的spec
  12. kubectl get pod nginx-deploy-7db697dfbd-2qh7v -o yaml #使用 -o 参数 加yaml,可以将资源的配置以 yaml的格式输出出来,也可以使用json,输出为json格式
  13. # 进入 Pod 容器终端, -c container-name 可以指定进入哪个容器。
  14. kubectl exec -it pod-name -- bash
  15. # 伸缩扩展副本
  16. kubectl scale deployment test-k8s --replicas=5
  17. # 把集群内端口映射到节点
  18. kubectl port-forward pod-name 8090:8080
  19. # 查看历史
  20. kubectl rollout history deployment test-k8s
  21. # 回到上个版本
  22. kubectl rollout undo deployment test-k8s
  23. # 回到指定版本
  24. kubectl rollout undo deployment test-k8s --to-revision=2
  25. # 删除部署
  26. kubectl delete deployment test-k8s

更多命令

  1. # 查看全部
  2. kubectl get all
  3. # 重新部署
  4. kubectl rollout restart deployment test-k8s
  5. # 命令修改镜像,--record 表示把这个命令记录到操作历史中
  6. kubectl set image deployment test-k8s test-k8s=ccr.ccs.tencentyun.com/k8s-tutorial/test-k8s:v2-with-error --record
  7. # 暂停运行,暂停后,对 deployment 的修改不会立刻生效,恢复后才应用设置
  8. kubectl rollout pause deployment test-k8s
  9. # 恢复
  10. kubectl rollout resume deployment test-k8s
  11. # 输出到文件
  12. kubectl get deployment test-k8s -o yaml >> app2.yaml
  13. # 删除全部资源
  14. kubectl delete all --all

现存的问题

  • 每次只能访问一个 pod,没有负载均衡自动转发到不同 pod
  • 访问还需要端口转发
  • Pod 重创后 IP 变了,名字也变了

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)

评价

k8s编写yaml文件的一些小问题

Yaml文件编写的小毛病kubenetes yaml 随在编写yaml文件中难免会出现一些磕磕碰碰的问题 建议大家去这个网站编写 yaml 文...

初探k8s

概念补充Deployment 是在 Pod 这个抽象上更为上层的一个抽象层,它可以定义一组 Pod 的副本数量,以及这个 Pod 的版本。一...

k8s 结合 Service 与 Deployment 部署容器

前言最近看到了学习k8s的网站,在文章末尾分享给大家,所以我最近的教程也会根据上面的课程来进行一些总结Service:暴露容...

k8s理论整理(持续更新)

整理一GOKubernetes 的工作节点负责运行应用程序 Pod 等工作负载;还可以运行网络或存储等扩展功能;每个节点上都运行了 ku...

k8s详解基本对象

k8s详解基本对象[TOC] 参考yaml代码如下apiVersion: apps/v1 kind: Deployment metadata: name: k8s-demo names...

.netcore 通过Flurl验证k8s内部访问与获取环境变量

.netcore验证k8s内部访问与获取环境变量[TOC] 创建k8s-name项目 项目结构如下 实验过程 st=>start: k8s-demo项...

.netcore 通过Flurl验证k8s内部访问与获取环境变量 (二)

.netcore验证k8s内部访问与获取环境变量 (二)[TOC] 修改k8s-name项目 NameController.cs [ApiController] ...

Mysql k8s部署Volume(hostPath)

Mysql K8s部署Volume[TOC] Mysql 与 Yaml 稍作修改这里提供的是官网的链接:https://kubernetes.io/docs/tasks/run-a...

k8s ConfigMap 配置中心

k8s ConfigMap 配置中心[TOC] ConfigMap 简介 ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用...

k8s Deployment中Rollout与Rollback使用与滚动更新

k8s Deployment中Rollout与Rollback使用[TOC] Rollout 简介 Deployment 的 rollout 当且仅当 Deployment 的 pod temp...

kubectl proxy 让外部网络访问k8s service的ClusterIP

kubectl proxy 让外部网络访问K8S service的ClusterIP[TOC] 使用kubectl proxy命令就可以使API server监听在本地的800...

k8s 网络(笔记)

K8s 网络(笔记)[TOC] K8s 网络 Docker容器网络回顾K8s CNIFlannel 网络插件跨node的 pod to podCluster Service是什么...

Jenkins在k8s中的安装

Jenkins在k8s中的安装[TOC] k8s部署Jenkins.yaml--- apiVersion: apps/v1 kind: Deployment #设置资源的类型为Deploym...

Centos7安装k8s(基于kubeadm)

Centos7安装k8s(基于kubeadm)[TOC] 下载相关包 链接:https://pan.baidu.com/s/1H9MuZsf28f_3uyVHBUS8jQ提取码:w9tv ...

Docker和k8s的区别与介绍

2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司。这家公司主要提供基于PaaS的云计算技术服务。...