Kubernetes-部署 Web 应用

本文指导如何在Kubernetes集群中部署MySQL和Tomcat应用,并通过Ingress实现外部访问,讲解端口映射和资源管理关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:Kubernetes-部署 Web 应用(永久地址,保存网址不迷路 🙃)

问题描述

该笔记将记录:在 Kubernetes Cluster 中,部署演示使用的 Web 应用,以快速入门。

解决方案

MySQL

cat > mysql.yaml <<EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql
EOF

kubectl apply -f mysql.yaml

Tomcat

cat > myweb.yaml <<EOF
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myweb
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myweb
  template:
    metadata:
      labels:
        app: myweb
    spec:
      containers:
      - name: myweb
        image: kubeguide/tomcat-app:v1
        ports:
        - containerPort: 8080
        env:
        - name: MYSQL_SERVICE_HOST
          value: 'mysql'
        - name: MYSQL_SERVICE_PORT
          value: '3306'
---
apiVersion: v1
kind: Service
metadata:
  name: myweb
spec:
  ports:
  - port: 8080
  selector:
    app: myweb
EOF

kubectl apply -f myweb.yaml

Ingress

cat > myweb-ingress.yaml <<EOF
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: myweb-ingress
  annotations:
    # use the shared ingress-nginx
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: "k8s-ingress.example.xyz"
    http:
      paths:
      - path: /
        backend:
          serviceName: myweb
          servicePort: 8080
EOF

kubectl apply -f ./myweb-ingress.yaml

访问页面

返回如下页面表示成功:
pasted_image.png

常见 Port 位置及含义

每个节点上都运行 kube-proxy 容器,它的作用是操作 iptables 规则,kube-proxy 会在防火墙上配置 DNAT 规则,将指定端口的访问传递给对应的容器。

在 Kubernetes 1.9.1 中,开始 beta 版本 IPVS 特性,也是在操作 Netfilter 进行流量转发。

在 Service 中

targetPort
在「Pod」中的容器的端口。

port
由「Service」暴露的端口。在容器内部使用,供容器之间访问。

nodePort
外部机器可访问的端口。在「Node」上暴露的端口,可以通过「IPAddress:Port」的形式直接访问;

在 Ingress 中

ServicePort
在 Ingress 中,能够看到对应关系,ServicePort 对于 Serivce 的 Port 参数。

常用命令汇总

更新 Deployment 的某个镜像:

# kubectl set image deployment/my-deployment mycontainer=myimage:latest

相关文章

「Resource Quotas」-
「Kubernetes」- 容器资源管理
「Kubernetes Objects」- Labels and Selectors
「Kubernetes Objects」- Managing Compute Resources(学习笔记)

参考文献

一个简单的Kubernetes应用部署示例
Kubernetes中的nodePort,targetPort,port的区别和意义(转)
Kubernetes how to make Deployment to update image
Basic usage - NGINX Ingress Controller

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值