一、k8s入门

1.什么是容器

降低虚拟机造成的物理主机资源浪费,提高物理主机的利用率,并能提供像虚拟机一样良好的应用程序隔离运行环境,人们把这种轻量型的虚拟机,称为容器。

2. 容器的管理工具

主要用于容器的创建、启动、关闭、删除等
管理工具:

  • docker
  • pouch
  • LXC、LXD、RKT

3.容器的编排部署工具

容器管理工具可以完成基础管理,应对企业中更复杂的应用部署,需要容器编排管理工具。
编排部署工具:

  • docker三剑客(docker machine 、docker compose、docker swarm)
  • mesos + marathon
  • kubernetes
    主要用于管理云平台中多个主机上的容器化应用,k8s的目标是让部署容器化应用建单且高效,提供了应用部署、规划、更新、维护的一种机制。

二、k8s功能、架构

1. k8s功能

可对应用进行自动化的部署、扩容、缩容。

【1】自动装箱

基于容器对应用运行环境的资源配置要求自动部署应用容器

【2】自我修复(自愈能力)
  • 当容器失败时,会对容器进行重启
  • 当所部署的noda节点有问题时,会对容器进行重新部署和重新调度
  • 当容器未通过监控检查时,会关闭此容器
  • 直到容器正常运行时,才会提供对外服务
【4】水平扩展

通过简单的指令、用户UI界面或基于CPU等资源的使用情况,对应用当容器进行规模的扩大或剪裁

【5】服务发现

用户不需要使用额外的服务发现机制,就能够基于k8s自身能力实现服务发现和负载均衡

【6】滚动更新

可以根据应用的变化,对应用容器运行的应用,进行一次性或批量更新

【7】版本回退

可以根据应用的部署情况,对应用容器运行应用,进行历史版本即时回退

【8】密匙和配置管理

在不需要重新构建镜像的情况下,可以部署和更新密匙和应用配置,类似热部署

【9】存储编排
  • 自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要
  • 存储系统可以来自于本地目录、存储网络(NFS、Gluster、Ceph、Cinder等)、公有云存储服务等

2.Node及Pod支持

  • Node(节点)数支持:早期100,现在2000
  • POd管理支持:早期1000,现在150000

三、k8s集群部署

1.应用部署架构的分类

  • 无中心节点架构:GlusterFS
  • 有中心节点架构:HDFS、K8S

2. 集群架构节点的角色功能

【1】 master node三个组件
  • k8s的控制节点,对集群进行调度管理,接受集群外用户去集群操作请求
  • master node 组成(四个组件):控制面
  1. API Server:通信
  2. kube-Scheduler:调度 通过调度算法将pod分布到节点(服务器)上
  3. Cluster State Store(ETCD数据库)/分布式键值存储
  4. Controller Manger Server :资源
【2】 worker node三个组件:用户面
  • 集群工作节点,运行用户业务应用容器1
  • worker node组成(三个组件)
    1. kubelet:worker端的管理工具,负责pod的生命周期、存储、网络管理
    2. kube proxy :网络代理,设置转发路径 ,负责service的服务发现(此处为内部服务的发现,外部服务的发现为ingress),负载均衡(4层负载)
    3. Container Runtime(运行时):创建容器的软件
【3】附加组件
  • kube - dns
  • ingress Controller:为服务提供外网入口(外部服务的发现)
    在这里插入图片描述

3. k8s部署

集群可用验证

kubbectl get node   # 节点状态
kubbectl  get cs    # 集群状态

四、k8s集群客户端kubectl命令

# 检查集群是否安装
rpm -qa | grep kubetctl
# 获取kubectl帮助
kubectl --help

使用kubectl命令的必要环境:集群链接配置文件

五、k8s集群资源清单文件(yaml)文件书写方法

1.YAML文件的书写格式

【1】YAML文件介绍
  • YAML仍为一种标记语言
  • 为了强调这种语言是以数据为中心,而不是以标记语言为重点
  • YAML是一个可读性高,用来表达数据序列的格式
【2】YAML文件基本语法
  • 使用空格作为缩进
  • 缩进空格数目不重要,只要是相同层级的元素左侧对齐就行
  • 低版本缩进不可以使用TAB键,只能使用空格
  • 使用#标识注释,从这个字符一直到行尾,都会被解释器忽略
【3】YAML支持的数据结构
  • 对象
  1. 键值对的集合
  2. 又称为映射/哈希/字典
  • 数组
  1. 一组按次序排列
  2. 又称为序列/列表
  • 纯量
    单个的,不可再分的值:数字、bool、null、时间日期。
    在YMAL中,字符串不使用引号,若是字符串中有空格或者特殊字符,可使用单引号或者双引号引起来

2.通过YAML文件实现资源清单描述方法

【1】常用字段
  • version:版本,str类型
  • kind:资源类型,str类型
  • metadata:元数据对象/资源对象,object
  • metadata.name:资源对象名称,str
  • metadata.namespace:资源对象命名空间,str
  • Spec:详细定义资源对象,资源对象描述,object

六、k8s集群namespace(命名空间)

1.介绍

  • 命名空间
  • 作用:多租户情况下,实现资源隔离
  • 属于逻辑隔离
  • 属于管理边界
  • 不属于网络边界
  • 可以针对每个namespace做资源配额

2.查看

kubect get namesapce

说明:

  • default :用户创建的pod默认在此命名空间
  • kune-public : 所有用户均可访问。包括未认证的用户
  • kube-node-lease : kubernetes 集群节点租约状态
  • kube-system : kubernetes 集群在使用

3.创建

【1】通过命令创建
kubectl create namespace test

输出: 
namespace/test created
【2】通过资源清单创建
1.准备资源清单文件
cat 01-create-ns.yam1

apiVersion: V1
kind: Namespace
metadata:
  name;demons1
  
2. 应用资源清单文件
kubectl apply -f 01-create-ns.yam1

3. 验证是否创建成功
kubectl get namespace

4.删除

【1】通过kubectl直接删除(不建议)
kubectl get namespace
kubectl delete namespace test
【2】通过kubectl命令应用资源清单文件删除(建议)
kubectl get namespace
cat 01-create-ns.yam1
kubectl delete -f 01-create-ns.yam1

七、k8s集群核心概念pod

k8s中不能直接管理容器,k8s集群中最小的调度单位为pod,因此要使用pod来运行应用容器

1. 概念

  • k8s中能够调度的最小单元
  • pod是容器的集合

2. 查看Pod

kubectl get pod
kubectl get pods
kubectl get pods --namespace default

3. 创建Pod

【1】编写用于 创建pod资源清单文件

4. Pod访问(不建议访问)

知道pod的IP地址
curl 172.xx.xx.xx

5. Pod删除方法

【1】通过kubectl直接删除(不建议)
 kubectl delete pods pod1
【2】通过kubectl命令应用资源清单文件删除(建议)
kubectl delete -f 02-create-pod.yam1

八、k8s集群核心概念controller(控制器)

了解pod的删除方法,发现pod的删除很简单,容易误操作,因此,引入另一个概念Controller(控制器),用于在k8s集群中以loop方式监视pod状态,若是发现pod被删除,会重新拉起一个pod,让pod一直保持在用户期望的状态。

1. Controller作用

  • 控制器
  • 用于对应用运行的资源进行监控
  • 当pod出现问题时,会把pod重新拉起,以达到用户期望的状态

2. Controller分类

常见pod控制器:工作服在类型,调用的RC控制器

  • Deployment :声明式更新控制器,用于发布无状态应用。针对RS的更高层次的封装。,提供了更丰富的部署相关的功能。
    优点:后端可以无限扩容
  • ReplicaSet(RS):副本集控制器,用于对pod进行副本规模扩大或裁剪,用于发布无状态应用。动态更新POD副本数,可以通过selector来选择对哪些pod生效。
  • StatefulSet:有状态副本集,用于发布有状态应用
    优点:持续稳定,可以保留IP不变
    主要特点:稳定的持久化存储,稳定的网络标志,有序部署有序扩展,有序收缩有序删除
    组成:Headless Service(对于有状态服务的DNS管理)、volumeClaimTemplate(用于创建持久化卷的模板)
  • DaemonSet:在k8s集群每一个Node上运行一个副本,用于发布监控或日志收集等应用
    装在每一个节点上
  • Job:运行一次性作业任务
  • CronJob:运行周期性作业任务

3. Deplyment控制器作用

  • 具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/稳定)等功能

4. 创建Depliyment控制器类型应用方法

【1】通过kubectl命令行创建(不建议)
【2】通过kubectl命令应用资源清单文件创建(建议)

5. 删除Depliyment控制器类型应用方法

带有控制器类型的POD不建议直接删除,如果必须删除,请删除控制器的应用名称。(直接删除pod后,POD会被再次拉起)

【1】通过kubectl命令行创建
# 查看应用:
kubectl get depliyment.apps
# 删除应用;
kubectl delete depliyment.apps nginx-app
【2】通过kubectl命令应用资源清单文件创建

九、k8s集群核心概念service

1. service 概念

  • 不是实体服务
  • 是一条iptables或者ipva的转发规则

2. service作用

  • 通过service为pod客户端提供访问POD方法,即客户端访问pod入口
  • service通过pod标签与pod进行关联

3. service类型

  • ClusterIP:默认,分配一个集群内部可以访问的虚拟IP ,只能内部访问
  • NodePort:在每个Node上分配一个端口作为外部访问入口
  • LoadBalancer:工作在特定的Cloud Provider上(例如:Googel Cloud、AWS、Openstack)
  • ExternalName:表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信

4. service参数

  • port:访问service使用的端口
  • targetPort:Pod中容器端口
  • NodePort:通过Node实现外网用户访问k8s集群内sercvice

5. service创建方法

【1】通过kubectl命令行创建(不建议)

默认创建的service为ClusterIP类型

# 1.创建Deploment类型应用
# 2.验证应用创建情况
get
# 3.创建service
kubectl expose deployment.apps nginx.app1 --typr=ClusterIP --tarrget-poet=80 --port=80
# 4. 查看service
kubectl get service
【2】通过kubectl命令应用资源清单文件创建(建议)

6. service删除方法

【1】通过kubectl命令行创建(不建议)
kubectl delete service nginx-app1
【2】通过kubectl命令应用资源清单文件创建(建议)
Logo

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

更多推荐