前言

上篇博客主要介绍了怎么搭建k8s集群,属于基础设施搭建。

但是光有基础设施还不够。要学kubernetes的话,我们需要搞清楚前几个概念。

node

pod

replicaset

deployment

service

这几个东西是层层递进的,可以说搞清这几个名词就可以搞清楚k8s的逻辑结构。

 

名词解释

1. Pod

k8s里最小的调度单位,译作豌豆荚。本身是一个逻辑主机,里边跑的都是docker的容器。

每个pod有独立的ip地址,且pod和pod之间的联系需要网络插件,例如flannel/calico等。

 

2. Replicaset

k8s里负责提供副本的组件,可提供pod的伸缩功能。

Replicaset亦可管理Pod的生命周期,如果一个pod挂掉,它可以用新的pod替换掉挂掉的pod,实现高可用。

 

3. Deployment

Deployment是很重要的一个概念,负责管理上面两项,即安排什么Pod,安排多少个副本,怎么伸缩等。

若此Deployment不可用,亦可回滚。

 

4. Service

定义外部访问内部pod的策略,可将外网的请求转发至k8s内网中的pod,使得外网可以访问内网资源。

 

5. Node

即为主机级别的节点,可以由物理机、虚拟机等组成。

 

实践:搭建一个k8s级别的nginx集群

1. 建立一个deployment,声明pod使用的容器信息和replicaset的副本信息

首先建立一个deployment.yml,内容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  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

其中,此Deployment中声明了pod的版本、使用的容器、副本数等信息。

 

2. 建立一个service,使其可以对外提供服务。

建立一个service.yaml, 内容如下:

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

此service定义了使用nginx作为app,将node的30080端口开放出来,进行请求的转发,使用NodePort模式。

其中,service的三种代理模式反别为:

  • ClusterIP: 默认模式,根据是否生成ClusterIP又可分为普通Service和Headless Service两类:
    1. 普通Service:通过为Kubernetes的Service分配一个集群内部可访问的固定虚拟ip(Cluster IP),实现集群内的访问。为最常见的方式。
    2. Headless Service:该服务不会分配Cluster IP,也不通过kube-proxy做反向代理和负载均衡。而是通过DNS提供稳定的网络ID来访问,DNS会将headless service的后端直接解析为podIP列表。主要供StatefulSet使用。
  • NodePort: 在cluster每个node上开辟一个转发的端口。
  • LoadBalancer: 除了使用一个Cluster IP和nodePort之外,还会向所使用的公有云申请一个负载均衡器(负载均衡器后端映射到各节点的nodePort),实现从集群外通过LB访问服务。
  • ExternalName: 是 Service 的特例。此模式主要面向运行在集群外部的服务,通过它可以将外部服务映射进k8s集群,且具备k8s内服务的一些特征(如具备namespace等属性),来为集群内部提供服务。此模式要求kube-dns的版本为1.7或以上。这种模式和前三种模式(除headless service)最大的不同是重定向依赖的是dns层次,而不是通过kube-proxy。
posted on 2021-08-16 00:03  eryoung2  阅读(150)  评论(0编辑  收藏  举报