一步步学习k8s
1、目前使用docker的情况
使用docker的缺点:
- 使用Docker容器化封装应用程序的缺点(坏处)
- 单机使用,无法有效集群
- 随着容器数量的上升,管理成本攀升
- 没有有效的容灾/自愈机制
- 没有预设编排模板,无法实现快速、大规模容器调度
- 没有统一的配置管理中心工具
- 没有容器生命周期的管理工具
- 没有图形化运维管理工具k8s需要java基础
使用Docker容器化封装应用程序的意义(好处)
- Docker引擎统一了基础设施环境-docker环境
- 硬件的配置
- 操作系统的版本
- 运行时环境的异构
- Docker引擎统一了程序打包(装箱)方式-docker镜像
- java程序
- python程序
- nodejs程序
- Docker引擎统一了程序部署(运行)方式-docker容器
- java -jar …→ docker run …
- python manage.py runserver → docker run …
- npm run dev → docker run …
2、因此我们需要一套容器编排工具
他就是: Kubernetes(K8S)
官网: https://kubernetes.io
GitHub: https://github.com/kubernetes/kubernetes
作用: 开源的容器编排框架工具(生态非常丰富)
意义: 解决Docker的
优势:
- 自动装箱,水平扩展,自我修复
- 服务发现和负载均衡
- 自动发布(默认滚动发布模式)和回滚
- 集中化配置管理和秘钥管理
- 存储编排
- 任务批处理运行
3、Kubernetes快速入门
3.1、四组基本概念
- Pod/Pod控制器
- Name/Namespace
- Label/Label选择器
- Service/Ingress
Pod:
- Pod是K8S里能够被运行的最小的逻辑单元(原子单元)
- 1个Pod里面可以运行多个容器,他们共享UTS+NET+IPC名称空间
- 可以把Pod理解成豌豆荚,而同一个Pod内的每个容器是一颗颗豌豆
- 一个Pod里运行多个容器,又叫 边车 (SideCar)模式
Pod控制器
- Pod控制器是Pod启动的一种模板,用来保证在K8S里启动的Pod应始终按照人们的预期运行(副本数、生命周期、健康状态检查)
- K8S内始终提供了众多的Pod控制器,常用的有以下几种
- Deployment
- DaemonSet
- ReplicaSet
- Statefulset
- Job
- Cronjob
Name
- 由于K8S内部,使用“资源”来定义每一种逻辑概念(功能),因此每一种“资源”都应该有自己的“名称”
- “资源”有api版本(apiVersion)类别(kind)、元数据(metadata)、定义清单(spec)、状态(status)等配置信息
- “名称”通常定义在“资源”的“元数据”信息里
Namespace
- 随着项目增多、人员增加、集群规模的扩大,需要一种能够隔离K8S内各种“资源”的方法,这就是名称空间
- 名称空间可以理解为K8S内部的虚拟集群组
- 不同名称空间内的“资源”,名称可以相同,相同名称空间内的同种“资源”,名称不能相同
- 合理的使用K8S的名称空间,使得集群管理员能够更好的对交付到K8S里的服务进行分类管理和浏览
- K8S里默认存在的名称空间有:default、Kube-system、Kube-public
- 查询K8S里特定“资源”要带上相应的名称空间
Label
- 标签是K8S特色的管理方式,便于分类管理资源对象
- 一个标签可以对应多个资源,一个资源也可以有多个标签,他们是多对多的关系。
- 一个资源拥有多个标签,可以实现不同维度的管理。
- 标签的组成:Key = value
- 与标签类似的,还有一种“注解”(annitations)
Label选择器
- 给资源打上标签后,可以使用标签选择器过滤指定的标签
- 标签选择器目前有两个:基于等值关系(等于、不等于)和基于集合关系(属于、不属于、存在)
- 许多资源支持内嵌标签选择器字段
- matchLabels
- matchExpressions
Service
- 在K8S的世界里,虽然每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失
- Service(服务)就是用来解决这个问题的核心概念
- 一个Service可以看做一组提供相同服务的Pod的对外访问接口
- Service作用于哪些Pod是通过标签选择器来定义的
Ingress

- Ingress是K8S集群里工作在OSI网络参考模型下,第7层的应用,对外暴露的接口
- Service只能进行L4 流量调度,表现形式是 ip + port
- Ingress则可以调度不同业务域,不用URL访问路径的业务流量
4、 K8S的三条网络详解
核心组件
- 配置存储中心 → etcd服务
- 主控(master)节点
- kube-apiserver服务
- kube-controller-manager服务
- kube-scheduler服务
- 运算(node)节点
- kube-kubelet服务
- kube-porxy服务
- CLI客户端
- kubectl(命令行工具)
核心附件
- CNI网络插件 → flannel/calico
- 服务发现用插件 → coredns
- 服务暴露用插件 → traefik
- GUI管理插件 → Dashborad
简单介绍一下
- apiserver
- 提供了集群管理的RESTAPI接口(包括鉴权、数据校验及集群状态变更)
- 负责其他模块之间的数据交互,承担通信枢纽功能
- 是资源配额控制的入口
- 提供玩呗的集群安全机制
- controller-manage
- 由一系列控制器组成,通过apiserver监控整个集群的状态,保证集群处于预期的工作状态
- Node Controller
- Deployment Controller
- Service Controller
- Volume Controller
- Endpoint Controller
- Garbage Controller
- Namespace Controller
- Job Controller
- Resource quta Controller
- scheduler
- 主要功能是接收调度pod到合适的运算节点上
- 预算策略(predict)
- 优选策略(priorities)
- kubelet
- 简单地说,kubelet的主要功能就是定时从某个地方获取节点上pod的期望状态(运行什么容器、运行的副本数量、网络或者存储如何配置等等),并调用对应的容器平台接口达到这个状态
- 定时汇报当前节点的状态给apiserver,以供调度的时候使用
- 镜像和容器的清理工作,保证节点上的镜像不会沾满磁盘空间,退出的容器不会占用太多资源
- porxy
- 是k8s在每个节点上运行网络代理,service资源的载体
- 建立了pod网络和集群网络的关系(clusterip → podip)
- 常用三种流量调度模式
- Userspace(废弃)
- Iptables(濒临废弃)
- Ipvs(推荐)
- 负责建立和删除包括更新调度规则、通知apiserver自己的更新,或者从apiserver那里获取其他kube-proxy的调度规则变化来更新自己的
K8S架构图

课程主机,共5台,密码均为:think999!

5、安装部署
常见的安装方式:
- Minikube 单节点微型K8S(学习预览),官网链接:https://kubernetes.io/docs/tutorials/hello-minikube/
- 二进制安装部署(生产首选,推荐)
- 使用kubeadmin进行部署,K8S的部署工具,跑在K8S里(相对简单,熟练推荐)
5.1、环境检查
关闭防火墙
讯享网禁用selinux
讯享网
5.2、调整操作系统
安装epel-release
装必要的工具
讯享网
DNS服务初始化
10.4.7.11 机器上安装 bind9
主配置文件
在10.4.7.11上配置区域文件
增加两个zone配置,od.com为业务域,host.com.zone为主机域
在10.4.7.11上配置主机域文件
在10.4.7.11上配置业务域文件
启动服务
所有服务器修改dns地址
5.3、准备签发证书环境
运维主机上:
安装CFSSL
证书签发工具CFSLL:R1.2
创建生成CA证书签名请求(csr)的JSON配置文件
生成CA证书和私钥
5.4、docker环境准备
可配置阿里云镜像加速
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/2663.html