002k8s中的资源及资源管理

002k8s中的资源及资源管理,第1张

002k8s中的资源及资源管理 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.几种资源
    NameSpacePodLableDeploymentService
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:       
Annotations:  
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   

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           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           80/TCP         3m38s
svc-nginx2   NodePort    10.110.8.179           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

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5704719.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存