Kubernetes集群常用资源控制器基本操作

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
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值