k8s的资源管理

最小单元pod而不是容器(容器由docker引擎管理),pod由pod控制器来管理
在这里插入图片描述

1.yaml语法

大小写敏感

缩进表示层级关系

建议使用空格(tab高版本支持)

#表示注释

冒号后面要空格

多个配置放到一个文件需要用三个 - 来分隔

2.资源管理方式

命令式对象管理

​ 直接使用命令操作资源

kubectl run nginx-pod  --image=nginx:1.14 --port=80

命令式对象配置(f即为file)

​ 使用配置文件方式操作资源

kubectl create/patch/delete -f nginx-pod.yaml

声明式对象配置

​ 适合创建和更新资源(不能删除,可以操作目录下所有yaml文件)

kubectl apply -f nginx-pod.yaml

3.命令使用

查看所有pod

 kubectl get pods/ kubectl get pod

查看某一个pod

kubectl get pods nacos-0/ kubectl get pod nacos-0

查看某一个pod详细信息

kubectl get pod nacos-0 -o wide

查看pod的配置信息

kubectl get pod nacos-0 -o json/yaml/
kubectl describe pod nacos-0

创建名称空间

 kubectl create namespace dev

查看名称空间

 kubectl get ns

在名称空间下面运行(run命令使用的是控制器删除的)

kubectl run pod --image=nginx:1.17.1 -n dev

获取名称空间下的pod,默认为default

 kubectl get pods -n dev

删除名称空间

 kubectl delete ns dev

6.几种资源

  1. NameSpace
  2. Pod
  3. Lable
  4. Deployment
  5. Service

6.1NAMESPACE

用于多环境,多租户(授权机制,配额机制)资源隔离

6.1.1查看所有名称空间

[root@k8s-master01 ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   6d8h #默认的命名空间
kube-node-lease   Active   6d8h #心跳的维护
kube-public       Active   6d8h #不需要认证都可以访问
kube-system       Active   6d8h #k8s本身创建的资源都在这里

6.1.2查看指定名称空间下的所有POD

 kubectl get pods -n kube-system

6.1.3查看某个名称空间的详情信息

kubectl describe ns default
Name:         default
Labels:       <none>
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource. #资源配额,内存。。。

6.1.4创建名称空间

kubectl create ns dev
[root@k8s-master01 ~]# kubectl create ns dev
namespace/dev created

6.1.5查看名称空间(存在性)

kubectl get ns dev
[root@k8s-master01 ~]# kubectl get ns dev
NAME   STATUS   AGE
dev    Active   91s

6.1.6删除名称空间

kubectl delete ns dev

6.1.7yaml方式创建名称空间

apiVersion: v1
kind:Namespace
metadata:
  name:dev
[root@k8s-master01 my_k8s]# kubectl create/delete -f temp-namespace-demo.yaml
namespace/dev created

6.2POD

一个根PODPAUSE,多个用户POD

系统组件POD

[root@k8s-master01 ~]# kubectl get pod -n kube-system
NAME                                   READY   STATUS    RESTARTS   AGE
coredns-9d85f5447-wgxmw                1/1     Running   46         6d23h
coredns-9d85f5447-xgzt6                1/1     Running   46         6d23h
etcd-k8s-master01                      1/1     Running   9          6d23h
kube-apiserver-k8s-master01            1/1     Running   12         6d23h
kube-controller-manager-k8s-master01   1/1     Running   72         6d23h
kube-flannel-ds-nls9x                  1/1     Running   5          6d22h
kube-flannel-ds-sphpd                  1/1     Running   5          6d22h
kube-flannel-ds-wkpv6                  1/1     Running   9          6d22h
kube-proxy-58ltk                       1/1     Running   8          6d23h
kube-proxy-8c69m                       1/1     Running   5          6d23h
kube-proxy-pw2ms                       1/1     Running   5          6d23h
kube-scheduler-k8s-master01            1/1     Running   65         6d23h

需要注意的是pod的管理是通过POD控制器实现的。

6.2.1POD的创建

# nginx 为控制器
# --image 指定镜像
# --port 暴露端口
# --namespace 名称空间
kubectl run nginx  --image=nginx:1.14-alpine --port=80 --namespace=dev

6.2.2查看容器描述

kubectl get pod/nginx-6867cdf567-7lzmg -o wide -n dev
kubectl describe pod/nginx-6867cdf567-7lzmg -n dev

6.2.3要删除POD(命令方式)首先要删除POD的控制器

kubectl get deployment -n dev/default
[root@k8s-master01 ~]# kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           6d22h
kubectl delete deployment 控制器名称 -n 名称空间
[root@k8s-master01 ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted

6.2.4配置方式创建

apiVersion: v1
kind: Pod
metadata:
  #pod名称
  name: nginx 
  namespace: dev
#pod描述  
spec:
  containers:
  - image: nginx:latest #容器镜像
    name: may-pod #容器名称
    ports: #端口相关
    - name: nginx-port
      containerPort: 80
      protocol: TCP
[root@k8s-master01 temptest]# vi nginx-test.yaml
[root@k8s-master01 temptest]# kubectl apply -f nginx-test.yaml
pod/my-nginx created

6.3LABEL

用处:用于给POD打标签,通过标签选择器便于统一操作。名称空间POD相互隔离不能通信。

特点:NODE/POD/SERVICE都可以添加任意多个LABEL

常用标签有:version/environment/tier等

操作标签使用标签选择器:

分为等式选择(name=xxx,name!=xxx)和集合选择(name in(xx,qq,aa),name not in (aa,bb,cc))

选择器可以混合使用

6.3.1命令方式打标签

kubectl label pod/my-nginx -n dev version=v1.0
[root@k8s-master01 temptest]# kubectl get pods -n dev --show-labels
NAME       READY   STATUS    RESTARTS   AGE   LABELS
my-nginx   1/1     Running   0          17m   version=v1.0

6.3.2查看POD上是否有标签

kubectl get pods -n dev --show-labels 
[root@k8s-master01 temptest]# kubectl get pods -n dev --show-labels
NAME       READY   STATUS    RESTARTS   AGE   LABELS
my-nginx   1/1     Running   0          14m   <none>

6.3.3更新标签

kubectl label pod/my-nginx -n dev version=v1.0 --overwrite

6.3.4挑出指定标签的POD

kubectl get pods -l "标签选择器" -n dev --show-labels 

6.3.5去除标签

标签-

kubectl label pod/my-nginx -n dev 标签-

6.3.6配置方式

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  namespace: dev
  labels:
    version: "3.0" 
    env: "test"
spec:
  containers:
  - image: nginx:latest
    name: pod
    ports:
    - name: nginx-port
      containerPort: 80
      protocol: TCP

6.4DEPLOMENT

用于管理POD

6.4.1创建控制器

kubectl run deploment名称  其他参数

6.4.2删除名称空间

kubectl delete deploment名称  其他参数

6.4.3配置方式创建

:控制器通过标签选择器来控制pod模板创建的pod资源

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: dev
spec:
  replicas: 3
  #标签选择器
  selector:
    matchLabels:
      run: nginx
  template:
    metadata:
      #标签
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        ports:
        - containerPort: 80
          protocol: TCP

6.5SERVICE

POD的IP会随着POD重建而改变,Service为一组同类POD对外提供服务的接口。只要Service不删IP就不会变。

一般建议Service通过标签选择器来选择POD

6.5.1创建

ClusterIP只能在集群内部访问

kubectl expose deploy nginx-deploy --name=svc-nginx1  --type=ClusterIP   --port=80 --target-port=80 -n dev
[root@k8s-master01 temptest]# kubectl get svc -n dev
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
svc-nginx1   ClusterIP   10.96.108.65   <none>        80/TCP    25s

NodePort可以外界访问

kubectl expose deploy nginx-deploy --name=svc-nginx2  --type=NodePort   --port=80 --target-port=80 -n dev
[root@k8s-master01 temptest]# kubectl get svc -n dev
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
svc-nginx1   ClusterIP   10.96.108.65   <none>        80/TCP         3m38s
svc-nginx2   NodePort    10.110.8.179   <none>        80:32464/TCP   7s

都可以进行访问了

在这里插入图片描述

6.5.2删除Service

kubectl delete svc 名称 -n dev

6.5.3配置方式

apiVersion: v1
kind: Service
metadata:
  name: svc-nginx
  namespace: dev
spec:
  clusterIP: 10.109.179.231 #固定svc的内网ip 写了type后可以不写
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    run: nginx
  type: ClusterIP
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐