DevOpsK8sK8s专题

k8s学习(一):k8s入门概念

2021-05-05  本文已影响0人  笔记本一号

参考:
https://zhuanlan.zhihu.com/p/43266412
https://zhuanlan.zhihu.com/p/292081941

k8s的作用和解决什么问题

由于docker并不具备分布式集群部署,自动扩容缩容,负载均衡的能力,并且没有解决故障自愈和集群内服务间的通信问题。k8s的出现就很好的弥补了docker的这些缺点,并且k8s自身也有非常出色的容器技术,不一定非得使用docker配合k8s,在最新的k8s版本中已经移除对docker容器的支持。简而言之k8s就是容器技术的分布式架构系统

作用:

k8s架构

K8S是属于主从设备模型(Master-Slave架构),即有Master节点负责核心的调度、管理和运维,Slave节点则在执行用户的程序。但是在K8S中,主节点一般被称为Master Node或者Head Node或Master Node,而从节点则被称为Worker Node或者Node。Master Node和Worker Node组成了K8S集群,同一个集群可能存在多个Master Node和Worker Node

Master Node
Worker Node
其他组件:

kube-dns:负责为整个集群提供 DNS 服务
Ingress Controller:为服务提供外网入口
Heapster:提供资源监控
Dashboard:提供 GUI
Federation:提供跨可用区的集群
Fluentd-elasticsearch:提供集群日志采集、存储与查询

K8S重要概念

k8s架构由master和node组成,node可以运行一个或多个pod,pod可以运行一个或者多个容器,master通过deployment管理和控制Pod,Kubelet管理node的资源和Pod生命周期,定期向master汇报node的资源使用情况 集群调度的最小单元就是一个pod,node可以运行一个或多个pod,一个pod可以运行一个容器或者多个容器,并且同一个Pod的容器可以共用Pod里的存储资源,node中通过Kubelet管理node的资源使用和Pod的生命周期(启动、关闭和监控) 每个pod有独一的ip地址,当有多个pod提供相同的服务的时候,就需要有负载均衡的能力,从而这里就涉及到一个概念就是service,专门用来提供服务的。服务主要是用来提供外界访问的接口,service可以关联一组pod,这些pod的ip地址各不相同,而service相当于一个复杂均衡的vip,用来指向各个pod,当pod的ip地址发生改变之后,也能做到自动进行负载均衡,在关联的时候,service和pod之间主要通过label来关联,也就是标签,例如图中的A,B就是标签,每个deployment通过标签可以知道它所管理哪些pod

通过实例理解概念:

参考:https://zhuanlan.zhihu.com/p/265997618

以搭建Nginx为例:
创建命名空间

vim nginx-namespace.yaml

apiVersion: v1 #类型为Namespace
kind: Namespace  #类型为Namespace
metadata:
  name: ns-test  #命名空间名称

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

在Namespace下创建资源,通过controller来创建pod。deployment为其中一种controller
deployment创建pod

vim nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: ns-test
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80

#创建
kubectl create -f nginx-deployment.yaml
#查询
kubectl get deployment
#或
kubectl get pods -n ns-test

创建service
使用随机生产ip:

vim nginx-service.yaml

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

kubectl create -f nginx-service.yaml
//查看生成的ip
kubectl get svc nginx-service -o wide

创建service
使用本机ip:

vim nginx-service.yaml

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

kubectl create -f nginx-service.yaml
上一篇下一篇

猜你喜欢

热点阅读