1.1 namespace
1.查看所有的namespace
[root@k8s-master ~]# kubectl get ns
NAME STATUS AGE
default Active 6h56m //所有未指定namespace的对象都会被分配在default命名空间
kube-node-lease Active 6h56m //集群节点之间的心跳维护,从1.13版本之后开始引入
kube-public Active 6h56m //此命名空间下的资源可用被所有人访问
kube-system Active 6h56m //所有由kubernetes系统创建的资源都处于这个命名空间下
2.查看某个namespace的yaml文件
[root@k8s-master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:
name: default
spec:
finalizers:
- kubernetes
status:
phase: Active
3.查看namespace的详细信息
[root@k8s-master ~]# kubectl describe ns default
4.创建删除namespace
创建
[root@k8s-master ~]# kubectl create ns dev
删除
[root@k8s-master ~]# kubectl delete ns dev
5.yaml创建
[root@k8s-master ~/k8s_1.19_yaml]# vim dev_ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev
创建ns
[root@k8s-master ~/k8s_1.19_yaml]# kubectl create -f dev_ns.yaml
删除ns
[root@k8s-master ~/k8s_1.19_yaml]# kubectl delete -f dev_ns.yaml
1.2 Pod
1.创建namespace
[root@k8s-master ~]# kubectl create ns dev
namespace/dev created
2.创建deployment类型的nginx pod
[root@k8s-master ~]# kubectl run nginx --image=ninx:1.15 --port=80 --namespace dev
pod/nginx created
3.查看pod是否创建成功
[root@k8s-master ~]# kubectl get pod -n dev
4.查看pod基本信息
[root@k8s-master ~]# kubectl get all -n dev
NAME READY STATUS RESTARTS AGE
pod/nginx 1/1 Running 0 59s
5.查看pod ip地址
[root@k8s-master ~]# kubectl get all -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
pod/nginx 1/1 Running 0 79s 10.244.2.12 k8s-node2 <none> <none>
6.查看pod详细信息
[root@k8s-master ~]# kubectl describe pod nginx -n dev
7.删除pod
[root@k8s-master ~]# kubectl delete pod nginx -n dev
pod "nginx" deleted
8.yaml创建
[root@k8s-master ~/k8s_1.19_yaml]# vim pod-nginx.yaml
apiVersion: v1 #api版本
kind: Pod #控制器类型
metadata: #元数据,也就是定义pod控制的信息
name: nginx-pod #设置pod名称
namespace: dev #设置pod的命名空间
spec: #定义pod资源的属性
containers: #容器信息
- image: nginx:1.15 #容器的镜像
name: nginx-pod #容器的名称,也相当于是容器的主机名
ports: #开放的端口
- name: nginx-port #给开放的端口起一个名称
containerPort: 80 #要开放什么端口
protocol: TCP #端口属于什么协议
9.配置资源限制
编写yaml文件
apiVersion: v1
kind: Pod
metadata:
name: pod-resources
namespace: dev
labels:
app: base
spec:
containers:
- name: nginx-port
image: nginx:1.11
resources: #定义资源配置
limits: #最大资源限制
cpu: "2" #cpu限制在2核
memory: "10Gi" #内存限制在10G
requests: #最小资源限制
cpu: "1" #cpu限制在1核
memory: "10Mi" #内存限制在10M
10.配置健康检查
apiVersion: v1
kind: Pod
metadata:
name: pod-livereadiness
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- name: nginx-port
containerPort: 80
livenessProbe: //存活性探测
tcpSocket: //使用TCPSocket探测方式
port: 80 //探测的端口
initialDelaySeconds: 30 //容器启动后30s以后开始探测
timeoutSeconds: 5 //探测超时时间
readinessProbe: //就绪性探测
httpGet: //使用HTTPGet探测方式
scheme: HTTP //协议使用http
port: 80 //应用端口
path: / //url路径
编写使用exec探测的yaml文件
#exec配置时,执行一个退出状态码为1的命令,观察pod的状态
[root@k8s-master ~/k8s_1.19_yaml]# vim pod-liveness-exec.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-liveness-exec
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- name: nginx-port
containerPort: 80
livenessProbe: #定义存活性探测
exec: #使用exec命令方式
command: ["/bin/cat","/tmp/hello.txt"] #执行具体命令:查看下/tmp/hello.txt文件,这个文件一定是不存在的,返回的状态码一定是1
使用httpget方式探测容器存活性
apiVersion: v1
kind: Pod
metadata:
name: pod-liveness-httpget
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- name: nginx-port
containerPort: 80
livenessProbe: #定义存活性探测
httpGet: #定义httpGet探测方式,如果下面不知道host参数,默认是pod的ip,地址连起来就是scheme://podip:port/path
scheme: HTTP #使用的应用协议,默认是http,可以是http、https
port: 80 #应用端口号
path: /hello #访问的url地址,地址连起来就是:http://127.0.0.1/hello,默认的nginx,hello页面一定不存在,健康检查也会失败
11.配置pod资源重启策略
编写yaml,设置pod重启策略为Never,观察效果
[root@k8s-master ~/k8s_1.19_yaml]# cat pod-restartpolicy.yaml
apiVersion: v1
kind: Pod
metadata:
name: pod-restartpolicy
namespace: dev
spec:
containers:
- name: nginx
image: nginx:1.15
ports:
- name: nginx-port
containerPort: 80
livenessProbe:
httpGet:
scheme: HTTP
port: 80
path: /hello
restartPolicy: Never #设置重启策略为Never,从不重启pod,结合健康检查失败的状态,观察pod的状态
1.3 lable
1.给pod资源加一个版本标签
[root@k8s-master ~]# kubectl label pod nginx-pod version=1.0 -n dev
pod/nginx-pod labeled
2.查看一个pod资源的所有标签
[root@k8s-master ~]# kubectl get pod nginx-pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod 1/1 Running 0 4m13s version=1.0
3.更新一个标签
更新标签和打标签的语法一样,只是在最后加一个overwrite参数
[root@k8s-master ~]# kubectl label pod nginx-pod -n dev version=2.0 --overwrite
pod/nginx-pod labeled
4.删除一个标签
[root@k8s-master ~]# kubectl label pod nginx-pod -n dev version-
pod/nginx-pod labeled
5.筛选出version等于2.0标签的pod
[root@k8s-master ~]# kubectl get pod -n dev -l version=2.0 --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod 1/1 Running 0 17m version=2.0
6.筛选出version不等于2.0标签的pod
[root@k8s-master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod2 1/1 Running 0 8m20s version=1.0
7.yaml创建
[root@k8s-master ~/k8s_1.19_yaml]# vim pod-nginx.yaml
apiVersion: v1 #api版本
kind: Pod #控制器类型
metadata: #元数据,也就是定义pod控制的信息
name: nginx-pod #设置pod名称
namespace: dev #设置pod的命名空间
labels: #定义标签
version: "3.0" #version标签值为3.0
app: "nginx" #app标签值为nginx
spec: #定义pod资源属性
containers: #容器信息
- image: nginx:1.15 #容器的镜像
name: nginx-pod #容器的名称,也相当于是容器的主机名
ports: #开放的端口
- name: nginx-port #给开放的端口起一个名称
containerPort: 80 #要开放什么端口
protocol: TCP #端口属于什么协议
[root@k8s-master ~]# kubectl get pod -n dev --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-pod 1/1 Running 0 33m app=nginx,version=3.0
nginx-pod2 1/1 Running 0 23m <none>
1.4 deployment
1.创建一个nginx的deployment资源
[root@k8s-master ~]# kubectl create deployment nginx-deploy --image=nginx:1.15 --replicas=3 -n dev
deployment.apps/nginx-deploy created
2.查看deployment控制器创建的pod
#可以看到我们刚刚制定了副本数为3,就启动了3个pod
[root@k8s-master ~]# kubectl get deploy,pod -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deploy 3/3 3 3 5m39s
NAME READY STATUS RESTARTS AGE
pod/nginx-deploy-75fbdff8c-fjc47 1/1 Running 0 5m39s
pod/nginx-deploy-75fbdff8c-sjm5f 1/1 Running 0 5m39s
pod/nginx-deploy-75fbdff8c-xlh2q 1/1 Running 0 5m39s
#UP-TO-DATE:成功升级的副本数量(也就是本次更新成功的副本数)
#AVAILABLE:可用副本的数量
3.查看deployment资源的详细信息
[root@k8s-master ~]# kubectl get deploy,pod -n dev -o wide
4.查看deployment资源创建过程信息
[root@k8s-master ~]# kubectl describe deploy nginx-deploy -n dev
5.yaml创建deployment
1.编写yaml
[root@k8s-master ~/k8s_1.19_yaml]# vim deploy-nginx.yaml
apiVersion: apps/v1 #deployment资源支持的版本号
kind: Deployment #控制器类型为Deployment
metadata: #元数据信息
name: nginx-deploy #定义deployment资源的名称
namespace: dev #定义deployment资源所在的命名空间
spec: #定义deployment资源的属性
replicas: 3 #pod副本数为3,即启动3个pod
selector: #标签选择器
matchLabels:
app: nginx #匹配标签app为nginx的pod模板
template: #定义pod资源模板
metadata: #元数据
labels: #定义标签
app: nginx #定义app标签为nginx
spec: #定义pod属性
containers: #定义容器信息
- image: nginx:1.15 #定义docker镜像
name: nginx-pod #定义pod的名称
ports: #定义容器的端口号
- name: nginx-port #给端口号起个名字
containerPort: 80 #容器要启动的端口
protocol: TCP #端口属于什么协议
[root@k8s-master ~/k8s_1.19_yaml]# kubectl get deploy,pod -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nginx-deploy 3/3 3 3 5m53s
NAME READY STATUS RESTARTS AGE
pod/nginx-deploy-7dd5c8f664-6qh2k 1/1 Running 0 5m52s
pod/nginx-deploy-7dd5c8f664-bmlpn 1/1 Running 0 5m52s
pod/nginx-deploy-7dd5c8f664-zbd8k 1/1 Running 0 5m52s
1.5 service
1.创建集群内部service资源
[root@k8s-master ~]# kubectl expose deploy nginx-deploy --name=svc-nginx --type=ClusterIP --port=80 --target-port=80 -n dev
service/svc-nginx exposed
2.查看创建的svc资源
[root@k8s-master ~]# kubectl get svc -n dev -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
svc-nginx ClusterIP 10.110.197.25 <none> 80/TCP 46s app=nginx
3.查看svc资源的详细信息
[root@k8s-master ~]# kubectl describe svc -n dev
Name: nginx-svc
Namespace: dev
Labels: <none>
Annotations: <none>
Selector: app=nginx //标签
Type: ClusterIP
IP: 10.104.142.152 //svc资源的地址
Port: <unset> 80/TCP
TargetPort: 80/TCP
Endpoints: 10.244.1.17:80,10.244.1.18:80,10.244.2.17:80 //这里会显示当前svc下绑定这那些pod
Session Affinity: None
Events: <none>
4.访问应用
访问svc的地址,不需要访问pod的地址
[root@k8s-master ~]# curl -I 10.104.142.152
HTTP/1.1 200 OK
5.删除svc资源
[root@k8s-master ~/k8s_1.19_yaml]# kubectl delete svc nginx-svc -n dev
service "nginx-svc" deleted
6.创建集群外部访问svc资源
[root@k8s-master ~]# kubectl expose deploy nginx-deploy --name=nginx-svc --type=NodePort --port=80 --target-port=80 -n dev
service/nginx-svc exposed
7.查看svc资源
[root@k8s-master ~]# kubectl get svc -n dev -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-svc NodePort 10.98.38.134 <none> 80:32659/TCP 14s app=nginx
#可以看到PORT一列多了一个32659端口,这个就是NodePort映射到宿主机的随机端口,可以使用任意节点IP:32659访问容器中的业务
8.yaml创建service
[root@k8s-master]# vim service-nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: dev
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
nodePort: 30080 --指定端口不用随机
selector:
app: nginx
type: NodePort