K8s学习笔记 资源配置和声明式对象配置
本文主要记录Kubernetes的资源管理,包括资源配置,声明式管理。
Kubernetes提供了RESTful风格的API,它将各类组件均抽象为“资源”,并通过属性赋值完成实例化 。API主要由资源类型和控制器两部分组成,资源通常以json、yaml格式并写入集群的对象,控制器则在集群资源存储完成后自动创建并启动。
常用的K8s资源有
- Pod
- Deployment
- Service
- Ingress
资源分类
依据资源的主要功能作为分类标准,Kubernetes的API对象⼤体可分为
-
⼯作负载 (Workload)
- ReplicationController
- ReplicaSet
- Deploymen
- StatefulSet
- DaemonSet
- Job
-
发现和负载均衡 (Discovery&LB)
-
配置和存储 (Config&Storage
-
集群 (Cluster)
- Namespace
- Node
- Role
- ClusterRole
-
元数据 (Metadata)
它们基本上都是围绕⼀个核⼼⽬的⽽设计:如何更好地运⾏和丰富Pod资源,从⽽为容器化应⽤提供更灵活、更完善的操作与管理组件。
资源配置
标准格式一般包括一级字段
- kind
- apiVersion
- metadata (对象元数据)
- spec(描述所期望的对象应该具有的状态)
- status(字段在对象创建后由系统⾃⾏维护)
以一个nginx的pod.yaml为例
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
- metadata:
- name 当前的对象名称
- labels: 当前对象的标签(键值对)
- spec
- containers,它的值是⼀个容器对象列表,⽀持嵌套创建⼀到 多个容器。
声明式对象配置
提供配置清单文件给k8s系统,并委托系统来跟踪活动对象的状态变动。管理操作的命令通过apply
- 创建
$kubectl apply -f <directory>/
- 更新
kubectl apply -f <directory>/
- 删除
kubectl apply -f <directory>/ --prune -l your-label
建议使用命令式的方法
kubectl delete -f <filename>
实战声明式部署nginx
定义的deployment文件: nginx_dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx-dp
spec:
replicas: 3
selector:
matchLabels:
app: nginx-pod
template:
metadata:
labels:
app: nginx-pod
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
暴露服务,定义service文件nginx_svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
type: NodePort
selector:
app: nginx-pod
ports:
- name: default
protocol: TCP
port: 80
targetPort: 80
访问nginx,output
参考
- Kubernetes进阶实战-第2版》 https://item.jd.com/13140598.html
- k8s 部署nginx https://github.com/kevinyan815/LearningKubernetes