来自 B 站上的一小时入门
教程不错, 没废话. 直接了当.
1. 导读
Kubernetes 为什么困难?
- 本身比较复杂, 组件多, 安装过程比较复杂.
- 本课程使用 K3s 来讲解学习. 从而避免将时间经历放在环境搭建上.
网络问题, 许多库用不了.
- 配置阿里云镜像加速.
- 手动拉取镜像, 导入导出.
K 的版本更新迭代比较快, 改动也会比较大, 官网文档也有问题.
- 教程采用 1.25 版本 (从 1.24 开始, 移除了对
Docker
的支持, 1.25 使用containerd
作为容器运行时)
官方文档的坑.
课程最后有一个实战案例.
2. 课程目录
整体分为三个部分:
- 第一部分:
- 课程导读
- K 简介
- K 架构
- 安装 Minikube
- 使用 K3s 快速搭建集群
- 常用对象的讲解
- Pod (容器集)
- Deployment (部署) 与 ReplicaSet (副本集)
- Service (服务)
- Namespace (命名空间)
- 使用配置文件
- 声明对象配置
- 金丝雀发布
3. Kubernetes 简介
Docker 可以快速部署, 搭建开发, 测试环境. 但是需要大规模部署和管理容器, 就需要使用 Kubernetes 了.
Kubernetes 是:
- 开源的容器编排引擎, 容器集群管理工具
- 对容器化应用进行自动化部署, 扩缩和管理
k 的 logo 是舵手, 即管理者. 简称 K8s. Google 在 2014 年开源 K8s.
K8s 可以提供:
- 服务发现和负载均衡. 管理对外的容器, 与负载均衡各个容器.
- 存储编排.
- 自动部署和回滚.
- 自动装箱计算. 根据配置自动的为容器分配资源 (CPU 和内存).
- 自我修复. 如哨兵的作用.
- 秘钥与配置管理. 维护敏感信息.
云原生: CNCF 云原生基金会, Cloud Native Computing Foundation.
Google 牵头的一系列公司, 一起提出.
简单解释, 运行在 K8s 上的应用即云原生应用.
- 原生应用, 用 Java, Go, Php, ... 开发的应用.
- 云原生应用, 跑在 K8s 上.
使其具有弹性扩展能力.
可以简单解释为, 采用容器技术为载体, 基于微服务架构思想的一套技术体系和方法论.
K8s 语言无关.
4. K8s 架构
K8s 是一个集群环境 (本质决定), 至少包含一个控制平面 (control panel), 以及一个或多个工作节点 (worker node).
- Control Panel: 管理工作节点, 维护集群状态. 所有任务分配都来自于此.
- Worker Node: 负责执行由控制平面分配的请求任务. 运行实际的应用和工作负载.
4.1 控制平面
一般包括:
- kube-apiserver, K8s 的前端, 与 K8s 集群通信就需要 API, apiserver 就是处理内部与外部请求的.
- kube-scheduler, 是调度程序, 并用于维护集群状态的好坏.
- kube-controller-manager, 负责实际运行集群. 它集合了多个控制器.
- 节点控制器 (Node Controller), 节点故障时进行通知与响应.
- 任务控制器 (Job Controller), 检测一次性任务的 Job 对象, 然后创建 Pod 来运行任务.
- 端点控制器 (Endpoint Controller), 填充端点对象 (加入服务与 pod)
- 服务账户与令牌控制器 (Service Account & Token Controller), 为新命名空间创建默认账户和 API 访问令牌.
- etcd, 是键值对数据库, 用于存储配置与集群状态数据.
4.2 Node 组件
会运行在每一个节点上, 负责维护运行的 Pod, 并提供 K8s 环境.
一般包括:
- kubelet, 它会运行在每一个节点上, 保证容器都跑在 Pod 中. 控制平面要在节点中执行什么操作时, kubelet 就会执行该操作.
- kube-proxy
- 容器运行时, 其中包括 Pod. Pod 中跑的就是容器.
4.2 逻辑关系
5. Minikube
官方给的一个工具, 在于简单体验.
- 单机版 K8s, 用于学习和调试程序.
- 安装 Minikube 需要 Docker 或虚拟机.
- 运行环境:
- 2 Core+
- 2G+ 内存
- 20GB+ 硬盘
- 联网环境
- Docker (或虚拟机, 推荐 Docker)
安装 Docker (在 VBox 中, Ubuntu22 环境)
curl -fsSL https://test.docker.com -o test-docker.sh
sudo sh test-docker.sh
sudo usermod -aG docker USER_NAME # 将当前用户加入到 Docker 用户组
配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
安装 Minikube
网站: https://minikube.sigs.k8s.io/docs/
在 Win 下直接使用 exe 安装包即可. 下载后安装, 安装完成后在命令行中即可使用 minikube 命令了.
Ubuntu 下安装使用命令:
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
运行使用命令:
minikube
无论是 WIn 还是 Linux 只要可以运行即表示安装成功.
但是按照官方文档介绍的 minikube start
是无法运行的, 需要一个配置:
minikube start --image-mirror-country='cn' --container-runtime=contained
说明:
--image-mirror-country='cn'
设置使用国内阿里云镜像--container-runtime=containerd
主要看 minikube 是安装的 k8s 的哪一个版本, 如果是 1.25 因不在使用 docker 可能会有问题.
镜像拉取完成后会创建一个 Docker 容器.'
如果安装失败, 注意要使用
minikube delete
删除清空已下载的残余文件.
会提示在阿里云上下载镜像.
教程视频采用的是 Kubernetes 1.25.0, 今天的版本已经到达 1.27.3, 一直安装失败, 切换到视频中对应的版本即可:
minikube start \
--image-mirror-country='cn' \
--container-runtime=containerd \
--kubernetes-version='v1.25.0'
Kubectl
kubectl
是 k8s 的命令行工具.
- 实现 K8s API 与控制面板的通信可以使用该工具.
- 部署程序, 检查和管理集群资源, 以及查看日志使用该工具.
kubectl
不同于其他程序, 它不运行与容器中, 而是直接运行在系统进程中.
可以使用 kubectl get node
来查看节点. 可以查看 minikube
的状态.
可以使用 kubectl get pod -A
查看 K8s 组件的运行状态.
使用 minikube ssh
进入容器.
查看 Kubelet
状态: systemctl status kubelet
不知道为什么, 无该命令, 不知是否与版本等有关系.
启用 Dashboard
执行命令:
minikube dashboard --url --port=63373
然后可以在浏览器中访问:
关掉命令行就无法访问了.