运维 kubernetes(k8s)基础学习

一、容器相关

1、发展历程:主机--虚拟机--容器

主机类似别墅的概念,一个地基上盖的房子只属于一个人家,很多房子会空出来,资源比较空闲浪费。

虚拟机类似楼房,一个地基上盖的楼房住着很多人家,相对主机模式提升了资源利用率。

容器类似租房的公寓,一个地基上盖的楼房,每一个房间属于一个人,相比虚拟机进一步提升了资源利用率。

2、虚拟机和容器的区别:

一个主机上可以有多个虚拟机,虚拟机部署需要借助主机上的Hypervisor(比如:VM软件)实现。每一个虚拟机包含(应用app+依赖库+操作系统)。

一个主机上可以部署多个容器服务,容器服务依赖宿主机上安装Docker。每一个容器服务包含(应用app+依赖库)。

相对而言,容器的空间更省,性能更高。

3、容器概念:

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

4、容器管理工具:

容器管理工具类似于虚拟机管理工具,主要用于容器的创建、启动、关闭、删除等。

容器管理工具有:

docker公司的docker

国内阿里公司的 Pouch

LXC、LXD、RKT等等

5、容器编排工具:

容器管理工具可以完成容器的基础管理,对于完成企业中更加复杂的应用部署,如需要对多应用的系统进行部署时,就需要更加复杂的工具来完成对容器运行应用的编排,这就是我们所说的容器编排部署工具。

概括:

Docker是容器管理工具,可以实现简单的项目部署。

Kubernetes是容器编排工具,可以实现更加复杂的应用部署。

6、常见容器编排工具:

(1)、docker 三剑客

--docker machine(部署和管理容器主机)

Docker Machine is a tool that lets you install Docker Engine on virtual hosts, and manage the hosts with docker-machine commands.

--docker compose(通过yaml,快速部署多个应用)

Compose is a tool for defining and running multicontainer Docker applications. With Compose, you use a YAML file to configure your application's services. Then, with a single command, you create and start all the services from your configuration.

--docker swarm (容器编排工具,管理docker集群)

Docker Swarm is native clustering for Docker.

(2)、mesos + marathon (分布式管理主机)

mesos主要作用是在分布式计算过程中,对计算机资源进行管理和分配。是基于Mesos的私有PaaS,它实现了Mesos的Framework。Marathon实现了服务发现和负载平衡、

为部署提供REST API服务、授权和SSL、配置约束等功能。Marathon支持通过Shell命令和Docker部署应用。 提供Web界面、支持cpu/mem、实例数等参数设置,支持单应用的Scale,但不支持复杂的集群定义。Mesos和Marathon的关系 如果将Mesos类比为操作系统的内核,负责资源调度。则Marathon可以类比为服务管理系统,比如init,systemd或upstart等系统,用来管理应用的状态信息。Marathon将应用程序部署为长时间运行的Mesos任务。

(3)、kubernetes

Kubernetes (K8s) is an open-source system for automating deployment, scaling, and management of containerized applications. 主要用于管理云平台中多个主机上的容器化的应用, Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),提供了应用部署,规划,更新,维护的一种机制。

二、Kubernetes

1、官网:

https://kubernetes.io/

2、开源托管平台:

https://github.com/kubernetes/

3、概念:

Kubernetes是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。在Kubernetes中,会将组成应用的容器组合成一个逻辑单元以更易管理和发现。

4、功能:

(1)、自动装箱

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

(2)、自我修复(自愈能力)

--当容器失败时,会对容器进行重启

--当所部署的Node节点有问题时,会对容器进行重新部署和重新调度

--当容器未通过监控检查时,会关闭此容器

--直到容器正常运行时,才会对外提供服务

(3)、水平扩展

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

(4)、服务发现

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

(5)、滚动更新

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

(6)、版本回退

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

(7)密钥和配置管理

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

(8)、存储编排

--自动实现存储系统挂载及应用,特别对有状态应用实现数据持久化非常重要

--存储系统可以来自于本地目录、网络存储(NFS、Gluster、Ceph、Cinder等)、公共云存储服务等

5、对node和pod的支持:

Node(节点)数支持

早期版本管理100台

现版本可以管理2000台

pod管理支持

早期版本管理1000个

现版本管理150000个

三、k8s架构

1、应用部署架构分类

(1)、无中心节点架构(该架构中,所有的节点都是平等关系)

GlusterFS

(2)、有中心节点架构(该架构中,存在核心节点负责管理和调度其他节点)

HDFS

K8S

2、k8s架构:

(1)、Master Node

k8s集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求;

Master Node由API Server、Scheduler、Cluster State Store(ETCD数据库)和Controller Manger Server所组成;

(2)、Worker Node集群工作节点,运行用户业务应用容器;

Worker Node包含kubelet、kube proxy和Container Runtime;

3、运行流程:

K8s分为两个大部分,master节点和worker节点

用户通过命令或者界面操作调用到matser节点的api service。Api service会根据请求的类型和业务去调度相应的worker进行工作,此外包括定时任务可以和apiservice通信,数据持久保存等也是通过apiserver实现。

四、集群部署

1、部署方式

(1)、使用二进制源码包部署(困难,复杂,不推荐)

(2)、使用kubeadm部署(推荐)

2、具体部署过程相对还是挺麻烦的,这里就略过了,最终结果为1个master节点,2个worker节点

注意:生产环境为了保证高可用,matser节点需要部署集群,1个节点肯定不够用。

五、Kubectl客户端

1、概述

在部署完成k8s集群后,我们需要通过一系列的命令来管理k8s集群。kubectl是一个管理k8s集群的客户端。可以通过命令行工具来使用k8s集群。

2、查看是否安装

rpm -qa | grep kubectl

如果没有安装的话,说明前面部署的集群还是不完善的,自己通过yum intsall的方式网上找一下部署吧

3、常用命令

4、使用实例

(1)、查看k8s集群的节点node(机器)信息和pod信息

pods是归属在指定的命名空间中的,可以指定-n 查看指定命名空间的pod信息

六、yaml

1、格式

格式和springboot的yaml配置文件格式一致

2、作用

通过yaml文件配置部署信息,可以快速部署应用,namespace,service等,可以大大加快部署效率

3、使用实例

语法还是挺多的,套路的方式比较深,需要的时候建议直接网上百度找一个比较好,没必要背下来那么多东西。

(1)、创建一个namespace

(2)、创建一个pod

七、namespace

1、概述

通常开发会有很多项目,也会有很多环境(开发,测试,预生产环境)等,当机器足够的话,可以在不同的机器进行部署不同的项目已经环境,但是如果机器不足的话,可以使用k8s集群的命名空间(namespace)来实现开发测试环境的隔离。

2、作用

在多租户的情况下,实现资源隔离,可以对每一个命名空间做资源分配,不同命名空间下的资源互相隔离

3、常用指令

(1)、查看命名空间

(2)、创建命名空间

命令行方式

yaml方式创建

编写yaml文件,执行yaml文件

(3)、删除命名空间

命令行方式

通过yaml方式删除命名空间(yaml文件和创建用同一个文件)

八、pod

1、概述:

pod是k8s集群的最小运行单元,是容器的封装。

可以理解pod就是一个容器的壳子,docker部署的容器服务是一粒花生米,pod是容器外部的花生壳。pod包裹着docker部署的容器服务。

2、使用示例

(1)、查看pod


(2)、创建pod

编写yaml文件,执行yaml文件创建

(3)、删除pod

命令行方式

yaml方式删除(指定和创建相同的yaml文件)

九、controller

1、概述:

controller,控制器,用于对应用资源对象的监控,可以创建应用,删除应用等,类似docker run运行容器服务。当pod出现问题时,会把pod重新拉起,以达到用户期望的状态(实现高可用)

2、常见的控制器

通常仅使用Deployment

3、deployment控制器

据有上线部署、滚动升级、创建副本、回滚到之前某一版本等功能;deployment包含replicaSet,除非需要自定义升级功能或者根本不需要升级pod,否则还是建议使用deployment而不是直接使用ReplicaSet。

4、使用实例

(1)、通过deployment创建应用

--image-pull-policy-IfNotPresent 镜像拉取策略,没有时拉取,有直接使用

--replicas=2 部署两个副本,即运行两个pod示例

(2)、查看deployment应用

查看pod,可以看到刚才运行的应用存在两个pod

(3)、通过yaml文件创建deployment应用

(4)、删除应用

命令行:

通过yaml文件删除应用(指定创建的yaml文件)

十、service

1、概述

Service只是一个转发规则,如:餐厅服务员概念。顾客去餐厅吃饭,用户进行点餐和付款操作,实际接收菜单和收款的人是大厨和老板。服务员在中间仅做信息转发,并不是真正工作的节点。

2、作用

通过service为pod客户端提供访问pod的方法,service通过pod标签与pod进行关联

如上图:

每一个node(宿主机)上有很多node服务,每一个pod服务有自己的ip(小圈)和service(大圈)。Pod重启后ip会发生变化(如:不一样顾客),但是service的ip基本很固定(如:服务员很少变动)。虽然pod的ip改变了,但是定义的标签不变,只要service关联pod的标签,即使pod的ip改变了,还是可以通过service找到对应的pod,从而对pod进行操作。

3、service类型

集群是一组相同的服务节点,完成共同的任务。如多个orderService服务一起成为一个集群。

4、service参数

5、使用示例

(1)、创建service

分2步,先创建应用,在创建service和应用(应用部署在pod中)进行关联

命令方式:

创建应用(deployment)

创建service

expose 指定应用的类型和名称

--type指定service类型

--target-port 指定pod服务的端口

--port指定service的端口

通过配置两个端口,实现service的端口和pod端口的绑定关系

(2)、查看service

(3)、通过yaml创建service

也是两部,可以放到一个yaml文件中,通过---作为分隔

创建应用

创建service

执行yaml文件,同时创建应用和service

(4)、通过service访问pod

k8s会自动负载均衡

(5)、查看端点,可以看到应用和服务的ip关系

(6)、分配的端口为外部端口,即yaml文件配置service的类型不是ClusterIP,而是NodePort,还需要指定一下宿主机IP

创建后的service会包含外部宿主机的端口(此时可以通过访问宿主机的30278端口,访问pod的服务)

(7)、删除service

可以使用命令行,也可以使用yaml文件方式

学海无涯苦作舟!!!

相关推荐
Avan_菜菜17 小时前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工7 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智7 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_7 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化