k8s系列学习

一、k8s介绍

    一个k8s集群有master和node节点组成,每个节点需要安装对应的组件

master节点:
ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、API注册和发现等机制
Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
Etcd :负责存储集群中各种资源对象的信息

node节点:
Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器
KubeProxy : 负责提供集群内部的服务发现和负载均衡
Docker : 负责节点上容器的各种操作

Master:集群控制节点,

Node:工作负载节点,主要跑pod

Pod:k8s的最小控制单元,容器都是运行在pod中的,一个pod中可以有1个或者多个容器

Controller:控制器,有多种不同类型的控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

Service:pod对外服务的统一入口

Label:标签,用于对pod进行分类,同一类pod会拥有相同的标签

NameSpace:命名空间,用来隔离pod的运行环境

 

 二、k8s资源管理方式

命令式对象管理
kubectl run nginx-pod --image=nginx
命令式对象配置
kubectl create/patch -f nginx.yaml
声明式对象配置
kubectl apply -f nginx.yaml
2.1命令式对象管理
通过kubectl命令行进行操作,语法如下
kubectl [command] [type] [name] [flags]
comand:指定要对资源执行的操作,例如create、get、delete
type:指定资源类型,比如deployment、pod、service
name:指定资源的名称,名称大小写敏感
flags:指定额外的可选参数
例如:
kubectl get pod
kubectl get pod nginx-54f4c6f758-c52nk
kubectl get pod nginx-54f4c6f758-c52nk -o yaml

kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:
kubectl  api-resources
常用的命令可以通过kubectl --help查看
常用的有:create/edit/get/patch/delete/explain/run/describe/logs/apply

 三、Namespace

    Namespace是k8s系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。

查看名称空间
kubectl get ns #查看所有
集群启动后会默认创建一些ns
NAME              STATUS   AGE
default           Active   45h     #  所有未指定Namespace的对象都会被分配在default命名空间
kube-node-lease   Active   45h     #  集群节点之间的心跳维护
kube-public       Active   45h     #  此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system       Active   45h     #  所有由Kubernetes系统创建的资源都处于这个命名空间

kubectl get ns default #查看指定
kubectl get ns default -o yaml #指定输出格式 wide、json、yaml
kubectl  describe ns default #查看详细信息
Name:         default
Labels:       <none>
Annotations:  <none>
Status:       Active  # Active 命名空间正在使用中  Terminating 正在删除命名空间

# ResourceQuota 针对namespace做的资源限制
# LimitRange针对namespace中的每个组件做的资源限制
No resource quota.
No LimitRange resource.
创建
[root@~]# kubectl  create ns test
namespace/test created
[root@ ~]# kubectl  get ns test
NAME   STATUS   AGE
test   Active   9s

删除
[root@ ~]# kubectl  delete ns test
namespace "test" deleted

通过yaml文件方式创建及删除
[root@ test]# cat ns-test.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: test


[root@ test]# kubectl create -f ns-test.yaml
namespace/test created
[root@ test]# kubectl get ns test
NAME   STATUS   AGE
test   Active   13s
[root@ test]# kubectl delete -f ns-test.yaml
namespace "test" deleted
[root@sjz002006 test]# kubectl get ns test
Error from server (NotFound): namespaces "test" not found

 四、pod

    pod是K8s中最小调度单元,容器必须在pod中,一个pod里可以有一个或多个容器

k8s在集群启动之后,集群中的各个组件也都是以Pod方式运行的。可以通过下面命令查看:
root@ test]# kubectl get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS   AGE
calico-kube-controllers-867d8d6bd8-2dn2w   1/1     Running   0          17d
calico-node-npc7p                          1/1     Running   0          17d
coredns-558bd4d5db-4gc5t                   1/1     Running   0          17d
coredns-558bd4d5db-frtwb                   1/1     Running   0          17d
etcd-                                      1/1     Running   0          17d
kube-apiserver-                            1/1     Running   0          17d
kube-controller-manager-                   1/1     Running   0          14d
kube-proxy-s5bmp                           1/1     Running   0          17d
kube-scheduler-                            1/1     Running   0          14d
# 命令格式: kubectl run 名称 [参数] 
# --image  指定Pod的镜像
# --port   指定端口
# --namespace  指定namespace

[root@ test]# kubectl run nginx --image=nginx --namespace test
pod/nginx created
root@ test]# kubectl get pod  -n test
NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          37s
[root@ test]# kubectl get pod  -n test -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP              NODE        NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          89s   172.16.143.29   sjz002006   <none>           <none>

查看详细信息
kubectl describe pod nginx  -n test

删除
kubectl delete pod nginx  -n test

 五、Label

    Label它的作用就是在资源上添加标识,用来对它们进行区分和选择。

一个Label会以key/value键值对的形式附加到各种对象上,如Node、Pod、Service等等
一个资源对象可以定义任意数量的Label ,同一个Label也可以被添加到任意数量的资源对象上去
Label通常在资源对象定义时确定,当然也可以在对象创建后动态添加或者删除

    Label Selector用于查询和筛选拥有某些标签的资源对象

例如:
name = slave  
name != slave
name in (master, slave)
name not in (master, slave)
name=slave,env!=production
为pod资源打标签
[root@ test]# kubectl label pod nginx version=v1.0 -n test
pod/nginx labeled
查看标签
[root@ test]# kubectl get pod nginx  --show-labels -n test
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          2m59s   run=nginx,version=v1.0
为pod资源更新标签通过--overwrite 参数
[root@ test]# kubectl label pod nginx version=v2.0 -n test --overwrite
pod/nginx labeled
[root@ test]# kubectl get pod nginx  --show-labels -n test
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          3m46s   run=nginx,version=v2.0

通过标签进行筛选
[root@ test]# kubectl get pod -n test  -l  version=v2.0  --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          8m36s   run=nginx,version=v2.0

删除标签通过-号即可
[root@ test]# kubectl label pod nginx version- -n test
pod/nginx labeled
[root@ test]# kubectl get pod nginx -n test   --show-labels
NAME    READY   STATUS    RESTARTS   AGE     LABELS
nginx   1/1     Running   0          9m47s   run=nginx

 

posted @ 2022-09-19 17:18  泉love水  阅读(53)  评论(0编辑  收藏  举报