Kubernetes Recipes学习笔记

Coding Alan 5年前 (2019-10-11) 3856次浏览 0个评论 扫描二维码

Kubernetes 架构简介和概览

Docker 简介

什么是容器?

  • 容器是一个软件的标准单元,其中打包了代码及其所有的依赖。

什么是 Docker?

  • 一个容器管理系统
  • 易于部署
  • 独立实例
  • 轻量

Docke Engine

  • 作为守护进程运行的服务
  • 有 Restful API
  • 命令行界面(cli)

注:本文中采用 Ubuntu 16.04进行所有的安装及测试

Kubernetes 集群架构概览

什么是 Kubernetes?

  • 容器集群管理器
  • 开源
  • 灵活

Kubernetes Recipes学习笔记

单节点 Kubernetes 部署(Minikube)

掌握 YAML文件

什么是 YAML?

  • 标记语言
  • 易于阅读

两个 Kubernetes 对象字段:

  • Spec 对象
  • Status 对象

常用 Kubernetes对象:

  • Nodes
  • Pods
  • Deployments
  • Services
  • ConfigMaps

构建第一个 Pod

配置 Kubernetes 集群

规划Kubernetes 集群

为什么要设计 Kubernetes集群?

  • 通过构建集群来启动团队自治
  • 以花费较少的方式进行伸缩

设计 Kubernetes 集群

  • Labels:组织服务
  • RBAC:Role-Based Access Control
    • 命名空间管理员:管理命名空间中的所有内容
    • 命名空间部署负责人:允许使用”get”, “list”, “watch”, “create”, “update”, “patch”和”delete”
    • 集群读用户:允许使用”get”, “list”和”watch”
  • 命名空间
  • 资源配额
  • 自动伸缩
  • Helm:包管理器

环境设置概览

安装 Kubernetes 的步骤:

  • 在所有节点上安装 Docker
  • 添加仓库密钥
  • 下载 Kubernetes 二进制文件
  • 添加仓库源
  • 更新系统
  • 安装工具:kubeadm kubelet kubectl
  • kubeadm init
  • 添加工作节点的密钥
  • 对用户应用权限
  • 配置 CNI(容器网络接口),有 flannel、Contiv 和 Weave

需开启的端口(如开启了防火墙):

Kubernetes Recipes学习笔记

Kubernetes 集群安装

准备两台主机/虚拟机:

Kubernetes Recipes学习笔记

根据提示分别在主节点上使用普通用户执行如下命令:

在 worker 节点的 root 用户下执行前面所提示的命令(请根据实际状况修改):

若出现如下错误:

可按照文档执行:

注意:如果使用的镜像默认创建的主机名都相同,请在/etc/hostname 中进行修改

其它命令

Kubernetes 服务验证

集群通信详情

集群通信概览

  • 所有内容来自 API 服务
  • 默认加密是 TSL(传输层加密)
  • kubeadm 为 worker 节点创建证书
  • 就为节点提供公用证书
  • 通信路径
    • API 服务对 kubelet
      • 获取 pod 的日志
      • 连接运行中的 pod
      • 端口转发功能
      • 验证连接 –kubelet-certificate-authority
      • SSH通道
    • API服务对其它(node, pod, services)
      • 普通 HTTP 连接

Kubernetes 管理

部署、平滑升级和回滚

测试文件(nginx-dep.yaml)

使用kubectl create -f nginx-dep.yaml命令创建

服务网络

Ingress

创建 pod

web-01.yaml

使用kubectl create -f web-01.yaml命令创建

ingress.yaml

使用kubectl create -f ingress.yaml命令创建

ingress-rules.yaml

使用kubectl create -f ingress-rules.yaml命令创建

在本地查看机器的 hosts 文件中绑定:

此时在浏览器中使用 http://test.kuber.net:30090/即可进行访问

部署负载均衡

loadbalancer.yaml

配置和使用集群 DNS

busybox.yaml

使用kubectl create -f busybox.yaml命令创建

补充:若执行以上命令出现unable to upgrade connection pod does not exist报错

持久化存储

进入执行化存储所需的步骤:

  • 创建 NFS 存储服务
  • 在 Kubernetes 中配置持久化磁盘卷
  • 声明持久化磁盘卷存储
  • 创建 Pod

在Master 节点添加pv.yaml

使用kubectl create -f pv.yaml命令创建

pvc.yaml

使用kubectl create -f pvc.yaml命令创建

nfs-pod.yaml(65534 为 id nobody 所获取的值)

使用kubectl create -f nfs-pod.yaml命令创建

自修复和自动伸缩

Kubernetes 自修复

Kubernetes 中的存活探针

存活探针类型

  • HttpGet
  • TCP
  • Command

liveness.yaml

使用kubectl create -f liveness.yaml命令创建

自动伸缩

什么是自动伸缩?

  • 是根据不同时间所需资源来分配资源的过程
  • 按需资源
  • 成本节约
  • Kubernetes 中的自动伸缩由指标驱动
    • CPU使用量
    • 内存使用量
    • 每秒的请求

横向 Pod 自动伸缩

横向 Pod 自动伸缩(HPA)

步骤:

  • 克隆一个 metric 服务
  • 创建一个 Pod
  • 配置 HPA

metrics-server-deployment.yaml文件修改(Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io))

监控类型

监控

监控让我们知道基础架构的性能和稳定性

两种主要类型的监控

基础架构监控

  • 集中于基础架构的性能、加载速度等

应用性能监控

  • 集中于应用所运行的基础架构上

两种展现数据的方式

聚合:视觉形式展现数据

警报:通知相关方

实现方案:

  • Prometheus:收集信息及存储数据
  • Grafana:展示数据

配置Prometheus和Grafana

配置 Prometheus 和 Grafana 的要求

  • Helm 安装
  • Charts
  • 安装步骤
    • 安装 Helm
    • 下载 charts
    • Values.yml文件自定义设置
    • 在Grafana 中配置 Prometheus数据源并验证其连接

 

集群监控

应用监控

报警

喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址