快速搭建一个Kubernetes集群
kubectl命令行管理工具
基础命令
命令 | 描述 |
---|---|
create | 通过文件名或标准输入创建资源 |
expose | 将一个资源公开为一个新的Service |
run | 在集群中运行一个特定的镜像 |
set | 在对象上设置特定的功能 |
get | 显示一个或多个资源 |
explain | 文档参考资料 |
edit | 使用默认的编辑器编辑一个资源 |
delete | 通过文件名、标准输入、资源名称或标签选择器来删除资源 |
部署命令
命令 | 描述 |
---|---|
rollout | 管理资源的发布 |
rolling-update | 对给定的复制控制器滚动更新 |
scale | 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job |
autoscale | 创建一个自动选择扩容或缩容并设置Pod数量 |
集群管理命令
命令 | 描述 |
---|---|
certificate | 修改证书资源 |
cluster-info | 显示集群信息 |
top | 显示资源(CPU/Memory/Storage使用,需要Heapster运行 |
cordon | 标记节点不可调度 |
uncordon | 标记节点可调度 |
drain | 驱逐节点上的应用,准备下线维护 |
taint | 修改节点taint标记 |
故障诊断和调试命令
命令 | 描述 |
---|---|
describe | 显示特定资源或资源组的详细信息 |
logs | 在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是可选的 |
attach | 附加到一个运行的容器 |
exec | 执行命令到容器 |
port-forward | 转发一个或多个本地端口到一个pod |
uncordon | 标记节点可调度 |
proxy | 运行一个proxy到Kubernetes API server |
cp | 拷贝文件或目录到容器中 |
auth | 检查授权 |
高级命令
命令 | 描述 |
---|---|
apply | 通过文件名或标准输入对资源应用配置 |
patch | 使用补丁修改、更新资源的字段 |
replace | 通过文件名或标准输入替换一个资源 |
convert | 不同的API版本之间转换配置文件 |
设置命令
命令 | 描述 |
---|---|
label | 更新资源上的标签 |
annotate | 更新资源上的注释 |
completion | 用于实现kubectl工具自动补全 |
其他命令
命令 | 描述 |
---|---|
api-versions | 打印受支持的API版本 |
config | 修改kubeconfig文件(用于访问API,比如配置认证信息 |
help | 所有命令帮助 |
plugin | 运行一个命令行插件 |
version | 打印客户端和服务版本信息 |
在Kubernetes中部署Java应用
项目迁移到K8S平台是怎样的流程
- 1,制作镜像
- 2,控制器管理Pod
- 3,暴露应用
- 4,对外发布应用
- 5,日志监控
Kubernetes基本概念
Pod
- 最小部署单元
- 一组容器的集合
- 一个Pod中的容器共享网络命名空间
- Pod是短暂的
Controllers
- Deployment:无状态应用部署
- StatefulSet:有状态应用部署
- DaemonSet:确保所有Node运行同一个Pod
- Job:一次性任务
- Cronjob:定时任务
更高级层次对象,部署和管理Pod
- Label:标签,附加到某个资源上,用于关联对象、查询和筛选
- Namespaces:命名空间,将对象逻辑上隔离
Service
- 防止Pod失联
- 定义一组Pod的访问策略
构建项目镜像
1 | Usage: docker build [OPTIONS] PATH | URL | - [flags] |
例如:
1 | FROM centos:latest |
在Kubernetes中部署应用
1 | kubectl create deployment nginx --image=nginx:1.16 -o yaml --dry-run> deploy.yaml |
理解Pod对象
Pod基本概念
- 最小部署单元
- 一组容器的集合
- 一个Pod中的容器共享网络命名空间与存储
- Pod是短暂的
Pod存在的意义
Pod为亲密性应用而存在。
亲密性应用场景:
- 两个应用之间发生文件交互
- 两个应用需要通过127.0.0.1或者socket通信
- 两个应用需要发生频繁的调用
Pod实现机制
- 共享网络
- 共享存储
1 | apiVersion: v1 |
Pod容器分类与设计模式
Infrastructure Container:基础容器
维护整个Pod网络空间InitContainers:初始化容器
先于业务容器开始执行Containers:业务容器
并行启动
Pod Template常用功能字段解析
- 变量
- 拉取镜像
- 资源限制
- 健康检查
最常用的控制器 Deployment
Pod与controllers的关系
- controllers:在集群上管理和运行容器的对象
- 通过label-selector相关联
- Pod通过控制器实现应用的运维,如伸缩,滚动升级等
Deployment功能与应用场景
- 部署无状态应用
- 管理Pod和ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image
应用场景:Web服务,微服务
YAML字段解析
使用Deployment部署一个应用
创建
1 | kubectl create deployment web --image=nginx:1.14 |
发布
1 | kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web |
升级与回滚
升级
1 | kubectl set image deployment/web nginx=nginx:1.15 |
回滚
1 | kubectl rollout history deployment/web |
应用弹性伸缩
1 | kubectl scale deployment nginx-deployment --replicas=10 |
Service 统一入口访问应用
Service 存在的意义
- 防止Pod失联(服务发现)
- 定义一组Pod的访问策略(负载均衡)
Pod与Service的关系
- 通过label-selector相关联
- 通过Service实现Pod的负载均衡( TCP/UDP 4层)
Service类型
ClusterIP:分配一个内部集群IP地址,只能在集群内部访问(同Namespace内的Pod),默认ServiceType。
ClusterIP 模式的 Service 为你提供的,就是一个 Pod 的稳定的 IP 地址,即 VIP。NodePort:分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务,可以在集群外部访问。
访问地址:: LoadBalancer:分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务。
除此之外,Kubernetes会请求底层云平台上的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去。
Ingress 对外暴露你的应用
Pod与Ingress的关系
- 通过Service关联Pod
- 基于域名访问
- 通过Ingress Controller实现Pod的负载均衡
- 支持TCP/UDP 4层和HTTP 7层
Ingress Controller
- 部署Ingress Controller
- 创建Ingress规则
1 | apiVersion: extensions/v1beta1 |