k8s资源详解

目录

一  Namespace

二  pod

三  label

四  deployment

五  service

六  总结


一 Namespace

Namespce是k8s非常重要的资源,主要的作用是来实现 多套环境的资源隔离 或者 多租户的资源隔离

//k8s默认创建了自定义namesapce   可以简写成ns
[root@master ~]# kubectl get namespace
NAME              STATUS   AGE
default           Active   4h23m  ##未指定namespace 分配的空间
dev               Active   22m    ## 自己自定义的
kube-flannel      Active   3h1m   ##
kube-node-lease   Active   4h24m  ##集群心跳维护
kube-public       Active   4h24m  ##此空间可以被所有人访问
kube-system       Active   4h24m  ##由系统创建的资源都处于这个命令空间

二 pod

pod是k8s集群管理的最小单元,程序必须要部署在容器里面,而容器必须存在pod中

//k8s集群的组件也是通过组件的方式去运行的
[root@master ~]# kubectl get pod -n kube-system
NAME                             READY   STATUS    RESTARTS   AGE
coredns-6d8c4cb4d-jzv2k          1/1     Running   0          4h41m
coredns-6d8c4cb4d-wdzsg          1/1     Running   0          4h41m
etcd-master                      1/1     Running   2          4h41m
kube-apiserver-master            1/1     Running   2          4h41m
kube-controller-manager-master   1/1     Running   2          4h41m
kube-proxy-6qf2n                 1/1     Running   0          3h55m
kube-proxy-nvhd9                 1/1     Running   0          4h41m
kube-proxy-xwsth                 1/1     Running   0          3h55m
kube-scheduler-master            1/1     Running   2          4h41m

//创建一个nginx pod
[root@master ~]# kubectl run nginx --image=nginx --namespace=dev --port=80  
pod/nginx created
[root@master ~]# kubectl get pod -n dev
NAME       READY   STATUS              RESTARTS   AGE
nginx      0/1     ContainerCreating   0          15s

//查看pod详细信息 如需更详细则使用describe
[root@master ~]# kubectl get pod nginx -n dev -o wide 
NAME    READY   STATUS    RESTARTS   AGE     IP           NODE      NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          5m54s   10.244.2.5   server1   <none>   


三 label

        label是k8s中系统中一个重要的概念,他的作用就是在资源上天机标识,用来对他们进行区分和选择

        label的特点:

  •    一个label会以key/value键值对的形式附加到各种对象上,如node pod service等
  • 一个资源对象可以定义任意数量的label,同一个label也可以被添加到任意数量的资源对象上去
  • label通常在资源对象定义时确定,当然也可以在对象创建后动态添加和删除
//查看dev空间下的nginx 是否带有标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME       READY   STATUS    RESTARTS   AGE    LABELS
nginxpod   1/1     Running   0          115s   <none>

//打上标签并且查看
[root@master ~]# kubectl label pod nginxpod  -n dev version=1
pod/nginxpod labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME       READY   STATUS    RESTARTS   AGE     LABELS
nginxpod   1/1     Running   0          3m18s   version=1

//更新标签
[root@master ~]# kubectl label pod nginxpod  -n dev version=2 --overwrite
pod/nginxpod labeled
[root@master ~]# kubectl get pod -n dev --show-labels
NAME       READY   STATUS    RESTARTS   AGE     LABELS
nginxpod   1/1     Running   0          6m25s   version=2
//筛选标签
[root@master ~]# kubectl get pod -n dev --show-labels
NAME          READY   STATUS    RESTARTS   AGE     LABELS
nginxpod      1/1     Running   0          9m16s   version=2
nginxpod-v1   1/1     Running   0          75s     version=1

[root@master ~]# kubectl get pod -l "version!=2" -n dev --show-labels
NAME       READY   STATUS    RESTARTS   AGE   LABELS
nginxpod-v1   1/1     Running   0          11m   version=1

//删除标签
[root@master ~]# kubectl label pod nginxpod-v1 -n dev  version-
pod/nginxpod-v1 unlabeled
[root@master ~]# kubectl get pod  -n dev --show-labels
NAME          READY   STATUS    RESTARTS   AGE     LABELS
nginxpod      1/1     Running   0          13m     version=2
nginxpod-v1   1/1     Running   0          5m11s   <none>
//编辑ymal文件
[root@master ~]# cat nginxpod.yaml 
apiVersion: v1
kind: Pod
metadata: 
     name: nginxpod-v1
     namespace: dev
     labels:   //添加标签
        version: "1"  
        env: "test"
spec:
 containers:
   - name: nginx-containers
     image: nginx

//更新pod
[root@master ~]# kubectl apply -f nginxpod.yaml 
Warning: resource pods/nginxpod-v1 is missing the kubectl.kubernetes.io/last-applied-configuration annotation which is required by kubectl apply. kubectl apply should only be used on resources created declaratively by either kubectl create --save-config or kubectl apply. The missing annotation will be patched automatically.
pod/nginxpod-v1 configured
[root@master ~]# kubectl get pod  -n dev --show-labels 
NAME          READY   STATUS    RESTARTS   AGE     LABELS
nginxpod      1/1     Running   0          17m     version=2
nginxpod-v1   1/1     Running   0          9m19s   env=test,version=1
//可以看到已经添加成功

四 deployment

        k8s很少直接管理控制pod,一般都是通过pod控制器完成,当pod的资源出现故障时,会尝试进行重启或者重建pod

命令格式 :kubectl run deployment  名称 【参数】

  • --image 指定镜像
  • --port 指定端口
  • --replicas 指定创建数量
  • --namespace 指定ns
//用deployment创建一个nginxpod-v2的pod
[root@master ~]# kubectl create deployment nginxpod-v2 --image=nginx --port=80 --namespace=dev 
deployment.apps/nginxpod-v2 created

//查看deployment
[root@master ~]# kubectl get deployment,pod -n dev
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginxpod-v2   1/1     1            1           104s

NAME                               READY   STATUS    RESTARTS   AGE
pod/nginxpod                       1/1     Running   0          42m
pod/nginxpod-v1                    1/1     Running   0          34m
pod/nginxpod-v2-59547fb4c7-qf5x6   1/1     Running   0          104s


五 service

        每个pod都会分配一个单独的pod IP 然后却存在如下两问题:

  • pod IP会随着pod的重建而修改IP地址
  • pod IP仅仅是集群内可见的虚拟ip,外部无法访问

service可以看作是一组同类的pod对外访问接口,借助service可以方柏霓的实现服务发现和负载均衡

//创建集群内部可以访问的service

[root@master ~]# kubectl create deployment tomcat --port=8080 --image=tomcat --namespace=dev
deployment.apps/tomcat created

[root@master ~]# kubectl expose deployment tomcat --name=svc-tomcat --type=ClusterIP --port=8080 --target-port=8080 -n dev 
service/svc-tomcat exposed


//查看服务
[root@master ~]# kubectl get svc -n dev
NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
svc-tomcat   ClusterIP   10.99.103.195   <none>        8080/TCP   74s
[root@master ~]# curl 10.99.103.195:8080
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/10.0.14</h3></body></html>##上述创##上面创建的service的类型为 cluster ip 这个IP地址只能集群内部可以访问
##如果需要创建集群外部也能访问的service 需要将类型修改为nodeport

//删除服务
[root@master ~]# kubectl delete svc svc-tomcat -n dev 
service "svc-tomcat" deleted

//创建服务
[root@master ~]# kubectl expose deployment tomcat --name=svc-tomcat --type=NodePort --port=8080 --target-port=8080 -n dev 
[root@master ~]# kubectl get svc -n dev
NAME         TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
svc-tomcat   NodePort   10.103.223.109   <none>        8080:31603/TCP   24s
##只需要在外部主机访问IP+端口号31603即可

 通过yaml文件去定义

 六 总结

        至此,已经掌握了namespace pod deployment service的基本操作,基本可以实现在

k8s中实现一个简单的服务部署和访问了,但是如果想要更好的使用kubernets,就需要深入学习这几种资源的细节和原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值