声明1:以下内容摘抄自《Docker技术入门与实战(第3版)》,仅供个人学习参考使用。
1. K8S组件
1.1 Master
组件 | 备注 |
---|---|
Etcd | 存放集群状态和配置的数据库 |
kube-apiserver | k8s外接口,提供RESTful API供客户端和其它组件调用 |
kube-scheduler | 资源调度 |
controller-manager * | 资源管理器,维护集群状态 |
kube-ui | (可选)查看集群状态的web界面 |
kube-dns | (可选)记录启动的容器组和服务地址 |
… | … |
1) Etcd
Etcd是一个开源的分布式键值仓库项目,可用作分布式系统中的配置信息管理和服务发现。具有简单(支持RESTful API和gRPC API)、安全(基于TLS实现安全连接访问)、快速(支持每秒万次的并发写操作)和可靠(基于Raft算法实现一致性)的特点。
2) kube-apiserver
作为 REST API的服务端,接受来自客户端和其它组件的请求,并更新Etcd数据库。推荐部署多个kube-apiserver提高可用性。
3) kube-scheduler
负责资源调度。
4) controller-manager
包括 replication, endpoint, node, namespace, ServiceAccounts 等。
1.2 Nodes
组件 | 备注 |
---|---|
容器引擎 | 目前支持docker和rkt |
kubelet | 汇报节点状态,并实现容器组的生命周期管理 |
kube-proxy | 配置正确的服务发现和负载均衡转发规则 |
… | … |
属性 | 备注 |
---|---|
地址(address) | hostname, ExternalIP, InternalIP |
状态(condition) | OutOfDisk, Ready, MemoryPressure, DiskPressure |
资源容量(capacity) | CPU, 内存,最多存放的pod个数 |
节点信息(info) | 系统内核,k8s版本,docker版本等 |
1) kubelet
将给定的pod运行在自己所在的节点上。
2) kube-proxy
在每个node监听,把对应服务端口信息映射到pod。就是一个NAT,又是一个负载均衡。
2. K8S使用
2.1 kubectl
kubectl是K8S自带的客户端,封装了对 K8S API 的调用。此外,社区还提供了多种语言的客户端库。
kubectl | [global-flgs] | [subcmd] | [resource-type] | [name] | [sub-cmd-falg] |
---|---|---|---|---|---|
get | |||||
describe | |||||
create | |||||
delete | |||||
… … |
声明2:以下内容摘抄自xxx,仅供个人学习参考使用。
3. Argo
3.1 存储
- 本地
- emptyDir
- hostPath
spec:
volumes:
- name: vol_1 #存储卷名
hostPath:
path: /data/nginx/html #宿主机目录
type: DirectoryOrCreate #如文件夹不存在,则创建
containers:
- name: mynginx
image: nginx:latest
volumeMounts:
- name: vol_1
mountPath: /usr/share/nginx/html #容器目录
- 网络
- nfs
##############################
# 静态pv
##############################
apiVersion: v1
kind: Pod
metadata:
name: myweb
spec:
containers:
- name: myweb
image: nginx
ports:
containerPort: 80
volumeMounts:
- name: nfs
mountPath: "/usr/share/nginx/html"
volumes:
- name: nfs
persistentVolumeClaim:
claimName: pvc-01
#***************************************************************************#
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-01 #与容器保持一致
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi #
selector: #通过labels绑定到对应pv(不指定则随机绑定)
matchLabels:
pv: pv-01
storageClassName: class1
#***************************************************************************#
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv-01 #
labels: #labels
pv: pv-01
spec:
capacity: #容量
storage: 5Gi
accessModes: #访问模式:ReadWriteOnce, ReadOnlyMany, ReadWriteMany
- ReadWriteMany
persistentVolumeReclaimPolicy: Recycle #回收策略:Retain; Recycle; Delete
storageClassName: class1 #设置pv类别
nfs:
server: 1.2.3.4
path: "/" #pv在nfs服务器上对应的目录
- 云存储
- nas
容器资源
- requests
- limits
调度
- Affinity/AntiAffinity
- Taint/Toleration