k8s发布应用的两种方式:
- kube.NETes-dashboard
- kubectl命令行
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F05b7-0.jpg)
文章插图
点击部署就成功了k8s应用的部署了 。部署后可以看到相应的deployment、pod、service等状态和信息 。
- Deployment
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F063L-1.jpg)
文章插图
- Pod
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F06146-2.jpg)
文章插图
- Service
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F031F-3.jpg)
文章插图
- 监控
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F05C9-4.jpg)
文章插图
二、命令行方式1、创建namespace
vim Nginx-namespace.yaml
apiVersion: v1 #类型为Namespacekind: Namespace#类型为Namespacemetadata:name: ns-test#命名空间名称labels:name: label-test#pod标签
执行:#创建kubectl create -f nginx-namespace.yaml#查询kubectl get namespace
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F02c5-5.jpg)
文章插图
2、创建pod一般不直接create pod,而是通过controller来创建pod 。deployment为其中一种controller 。
vim nginx-deployment.yaml
apiVersion: Apps/v1kind: Deploymentmetadata:namespace: ns-testname: nginx-deploymentspec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:contAIners:- name: nginximage: nginx:alpineports:- containerPort: 80
执行:#创建kubectl create -f nginx-deployment.yaml#查询 。查询时需要等待一会,此时会下载镜像需要时间kubectl get deployment-n ns-test#或kubectl get pods -n ns-test
可以看到"replicas: 3",所以有3个pod并且每个pod只有一个容器 。都正常启动 。![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F06037-6.jpg)
文章插图
接下来看看如何访问,查看访问的端口:
kubectl get pods -o wide -n ns-test#-o wide 展开的意思
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F022C-7.jpg)
文章插图
这时已经可以访问了,就是通过虚拟ip来端口 。
- curl 10.244.1.43
- curl 10.244.1.44
- curl 10.244.1.45
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F035Q-8.jpg)
文章插图
那问题来了,这么多虚拟ip,每次pod重建还会重新生成,那怎么办呢?
看下面的servcie 。
3、创建servicevim nginx-service.yaml:
apiVersion: v1kind: Servicemetadata:namespace: ns-testname: nginx-servicespec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80
执行:kubectl apply -f nginx-service.yamlkubectl get svc nginx-service -o wide-n ns-test
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F01F7-9.jpg)
文章插图
可以看到有一个cluster-ip,通过这个端口+端口就可以负载到之前3个节点的nginx了 。
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F0O04-10.jpg)
文章插图
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F03P5-11.jpg)
文章插图
当然cluster-ip也只能在集群内的机器访问 。再结合nginx或域名就可以向外提供负载均衡访问了 。
可以看到cluster-ip虽然有负载均衡的功能但还是不能外网访问k8s部署的应用,那如何才能直接外网能访问k8s部署的应用呢?
设置service为nodeport方式,如下:
apiVersion: v1kind: Servicemetadata:namespace: ns-testname: nginx-servicespec:selector:app: nginxports:- nodePort: 30000protocol: TCPport: 80targetPort: 80type: NodePort
其中type: NodePort另外想指定端口也可以加上nodePort: 30000 。这样就可以通过主机ip+nodePort的访问k8s部署的应用了 。执行:
kubectl apply -f nginx-service.yamlkubectl get svc nginx-service -o wide-n ns-test
![Nginx Kubernetes 部署应用的两种方式,你更喜欢哪一种?](http://img.jiangsulong.com/231106/154F01025-12.jpg)
推荐阅读
- Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
- 使用 kube-downscaler 降低 Kubernetes 集群成本
- K8s部署方式大全:从基础到进阶,一文带你掌握所有技巧
- 掌握Nginx的高级用法,构建高性能Web应用
- 轻松利用日志动态分析平台玩转Nginx运维管理
- Kubernetes中的优雅关闭和零停机时间部署
- 关于Kubernetes在生产中的应用,这十大要点ChatGPT不会说?
- 在 Kubernetes 环境中实现 gRPC 负载均衡
- Nginx配置指南:快速安装与反向代理设置
- 微服务部署—使用Docker安装Nginx并配置免费的SSL证书详解