<返回更多

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

2023-11-06  今日头条  玄明Hanko
加入收藏

k8s发布应用的两种方式:

一、Dashboard方式

配置部署:包含应用名称、容器镒、pod数量、Service非常的方便,不想设置配置yaml的可以很方便的部署。

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

点击部署就成功了k8s应用的部署了。部署后可以看到相应的deployment、pod、service等状态和信息。

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

二、命令行方式

1、创建namespace

vim Nginx-namespace.yaml
 
apiVersion: v1 #类型为Namespace
kind: Namespace  #类型为Namespace
metadata:
  name: ns-test  #命名空间名称
  labels:
    name: label-test  #pod标签

执行:

#创建
kubectl create -f nginx-namespace.yaml
#查询
kubectl get namespace

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

2、创建pod

一般不直接create pod,而是通过controller来创建pod。deployment为其中一种controller。

vim nginx-deployment.yaml
 
apiVersion: Apps/v1
kind: Deployment
metadata:
  namespace: ns-test
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      contAIners:
      - name: nginx
        image: nginx:alpine
        ports:
        - 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只有一个容器。都正常启动。

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

接下来看看如何访问,查看访问的端口:

kubectl get pods -o wide -n ns-test   #-o wide 展开的意思

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

这时已经可以访问了,就是通过虚拟ip来端口。

如下图,只要集群范围内的机器就可以直接通过IP访问了。

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

那问题来了,这么多虚拟ip,每次pod重建还会重新生成,那怎么办呢?

看下面的servcie。

3、创建service

vim nginx-service.yaml:

apiVersion: v1
kind: Service
metadata:
  namespace: ns-test
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

执行:

kubectl apply -f nginx-service.yaml
kubectl get svc nginx-service -o wide  -n ns-test

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

可以看到有一个cluster-ip,通过这个端口+端口就可以负载到之前3个节点的nginx了。

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

当然cluster-ip也只能在集群内的机器访问。再结合nginx或域名就可以向外提供负载均衡访问了。

可以看到cluster-ip虽然有负载均衡的功能但还是不能外网访问k8s部署的应用,那如何才能直接外网能访问k8s部署的应用呢?

设置service为nodeport方式,如下:

apiVersion: v1
kind: Service
metadata:
  namespace: ns-test
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - nodePort: 30000
  	protocol: TCP
    port: 80
    targetPort: 80
  type: NodePort

其中type: NodePort另外想指定端口也可以加上nodePort: 30000。这样就可以通过主机ip+nodePort的访问k8s部署的应用了。

执行:

kubectl apply -f nginx-service.yaml
kubectl get svc nginx-service -o wide  -n ns-test

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

可以看到我使用的是我主机的ip+nodePort可以直接访问到nginx了。

Kubernetes 部署应用(Nginx)的两种方式,你更喜欢哪一种?

三、补充知识

1、Service

Kubernetes 服务有四种类型:ClusterIP、NodePort、LoadBalancer 和ExternalName。服务spec中的type 属性决定了服务如何暴露给网络。

关键词:Kubernetes      点击(14)
声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多Kubernetes相关>>>