# 几个重要的资源
# Namespace ns
- 边界、组
- 用于实现多套环境的资源隔离, 或者多租户的资源隔离
- pod放在不同的ns内进行隔离,形成租的概念
- 通过k8s授权机制
- k8s配置资源配额机制
kubectl get ns
kubectl create ns dev
kubectl delete ns dev
kubectl get pod -n dev
kubectl describe ns default
1
2
3
4
5
2
3
4
5
apiVersion: v1
kind: Namespace
metadate:
name: dev
1
2
3
4
2
3
4
kubectl create -f ns-yaml.yamlkubectl delete -f ns-yaml.yaml
默认存在4个 ns
- default 未指定ns
- kube-node-lease 集群节点之间心跳维护
- kube-public 可以被所有人访问,包括未认证用户
- kube-system 所有k8s系统创建的资源
# Pod
- Pod k8s 集群管理的最小单元, 运行必须要部署在容器里面,容器在pod里面
- 一个pod里面有1个获多个容器
- k8s 集群的组件也是以pod的形式运行的
kubectl get pod -n kube-system - 创建
kubectl run nginx --image=nginx:1.17.1 --port 80 -n dev
- 查看
kubectl get pod -n dev -o widekubectl describe pod pod-name -n dev一般排错的时候使用,看Events
- pod访问
kubectl get pod -n dev -o wide获取ip和端口号访问
- 删除
kubectl delete pod pod-name -n dev- 删除成功吗?删除但是会创建一个(), 控制器 run 命令创建会使用deployment控制器(这个控制器发现pod被删了会立刻创建出来一个)
- 所以要删除控制器才能真正的删除
kubectl delete deployment pod-name
# Label
一种标识选择机制
键值对的形式附加到资源上, Node, Pod, Service等
资源与标签关系时多对多
通常在资源定义的时候确定,也可以新增删除
多维度分组,灵活方便资源分配、调度、配置、部署等工作
创建标签
kubectl label pod nginx-pod version=1.0 -n dev
查看标签
kubectl get pod nginx-pod --show-labels -n dev
修改标签
kubectl label pod nginx-pod version=2.0 -d dev --overwrite# 覆盖字段级别的更新
筛选标签
kubectl get pods -n dev -l version=2.0kubectl get pods -n dev -l version in (2.0, 1.0)
删除标签
kubectl label pods pod-name -n dev version-, 减号
# Label Selector
- 基于等式 name = salve / name != salve
- 基于集合 name in (master, slave), name not in (master, slave)
# Deployment deploy
k8s中pod最小单元,但是很少直接控制pod, 一般都是通过pod控制器
去报pod符合预期状态运行
Deployment是控制器的一种,它会在资源出现故障会尝试重启pod
deployment控制器和pod关联是通过label实现的
创建
kubectl run nginx --image=nginx:1.17.1 --port=80 --replicas=3 -n dev
删除
kubectl delete deploy nginx -n dev
apiVersion: v1
kind: Deployment
metadata:
name: nginx
namespace: dev
spec:
replicas: 3
selector:
matchLabels: # 通过标签跟pod建立关系
run: nginx
# pod模板
template:
metadata:
labels:
run: nginx
spec:
containers:
- image: nginx:1.17.1
mame: nginx
ports:
- cpmtaomerPort: 80
protocol: TCP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Service svc
每个pod都会分配一个单独的pod IP
- pod ip 会随着pod的重建改变
- pod ip 是集群内的虚拟ip, 外部无法访问
service 来解决这个问题
service 就是一组同类pod对外的访问接口
借助servie可以方便的实现 服务发现 和 负载均衡
service 也是根据label选择器来访问对应pod
创建、暴露 service (通过deploy指定对应的pod)
kubectl expose deploy nginx --name=svc-nginx1 --type=ClusterIP --port=80 --target-port=80 -n dev- type=ClusterIP 只能集群内部访问
- type=NodePort 创建外部可以访问的Service
删除
kubectl delete svc svc-name -n dev
apiVersion: v1
kind: Service
metadata:
name: svc-nginx
namespace: dev
spec:
clusterIP: 10.10.10.10 # 不写的话自动分配
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
run: nginx
type: ClusterIP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14