控制器

Pod 的分类

自主式 Pod:Pod 退出后不会被创建

控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目

控制器类型

Replication Controller和ReplicaSet 、Deployment 、DaemonSet 、StatefulSet、Job、CronJob HPA全称Horizontal Pod Autoscaler

       ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。 ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。 ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。

       StatefulSet是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”  StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供*序号和唯一性保证*。  StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值: 稳定的、唯一的网络标识符。 稳定的、持久的存储。 有序的、优雅的部署和缩放。 有序的、自动的滚动更新。

       Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。 典型的应用场景: 用来创建Pod和ReplicaSet 滚动更新和回滚 扩容和缩容 暂停与恢复。

Job控制器

执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束。

 给三台机器下载per1

 复制文件并编辑

 

 

CronJob控制器

CronJob HPA全称Horizontal Pod Autoscaler,根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放。

 

 

 

 

 

service

• Service可以看作是一组提供相同服务的Pod对外的访问接口。借助Service,应 用可以方便地实现服务发现和负载均衡。

• service默认只支持4层负载均衡能力,没有7层功能。(可以通过Ingress实现)

• service的类型:

• ClusterIP:默认值,k8s系统给service自动分配的虚拟IP,只能在集群内部访问。

• NodePort:将Service通过指定的Node上的端口暴露给外部,访问任意一个 NodeIP:nodePort都将路由到ClusterIP。

• LoadBalancer:在 NodePort 的基础上,借助 cloud provider 创建一个外部的负载均 衡器,并将请求转发到 :NodePort,此模式只能在云服务器上使用。

• ExternalName:将服务通过 DNS CNAME 记录方式转发到指定的域名(通过 spec.externlName 设定)。

• Service 是由 kube-proxy 组件,加上 iptables 来共同实现的.

• kube-proxy 通过 iptables 处理 Service 的过程,需要在宿主机上设置相当多的 iptables 规则,如果宿主机有大量的Pod,不断刷新iptables规则,会消耗大量的CPU 资源。

• IPVS模式的service,可以使K8s集群支持更多量级的Pod。

从外部访问 Service ,适用于公有云上的 Kubernetes 服务。这时 候,你可以指定一个 LoadBalancer 类型的 Service。

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  ports:
    - name: http
      port: 80
      targetPort: 80

 

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1

 

 

 

ExternalName

 从外部访问的第三种形式ExtenalName,通过给定域名访问解析

拉起容器后查看服务信息,可以看到externalname额外的域名  

 

apiVersion: v1

kind: Service

metadata:

name: my-service

spec:

type: ExternalName

externalName: test.baidu.com

 

更改为百度

 查询svc发现更改

下载网站内容

 

 查看镜像名称

 搜索镜像

 

 

 

 

 

 

 

 更改镜像名称后

 开启服务查看结果

 

 

 

 

 ingress服务

一种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的Ingress 服务。Ingress Controller 会根据你定义的 Ingress 对象,提供对应的代理能力。业界常用的各种反向代理项目,比如 Nginx、HAProxy、Envoy、Traefik 等,都已经为Kubernetes 专门维护了对应的 Ingress Controller。  

详情登录官网查看:https://kubernetes.github.io/ingress-nginx/ 

 

 复制官方文档 内容

 

 apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myservicea
spec:
  rules:
  - host: www1.westos.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web1
            port:
              number: 80
  ingressClassName: nginx

 

 

kubectl describe ingress ingress-myservice

 

Ingress TLS 配置 

 

 

 

 

 

 

 

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"

 

 

 

vim ingress.yaml

进入set paste模式编辑 不会出缩进问题

 访问http://www1.westos.org/

 

 

 添加认证

 

 


apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-myservicea
  annotations:
    nginx.ingress.kubernetes.io/app-root: /hostname.html  
    nginx.ingress.kubernetes.io/auth-type: basic
    nginx.ingress.kubernetes.io/auth-secret: basic-auth
    nginx.ingress.kubernetes.io/auth-realm: 'Authentication Required - qaq'
spec:
  tls:
    - hosts:
      - www1.westos.org
      secretName: tls-secret
  rules:
  - host: www1.westos.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web1
            port:
              number: 80
  - host: www2.westos.org
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web2
            port:
              number: 80

 

 

 

 

 

 

 

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐