【K8S基础】02 基本操作

目录


1. 客户端工具 kubectl

参考:

  1. Kubernetes Doc(官方)
  2. Kubernetes学习笔记 – 很丰富

视频教程:

  1. 黑马程序员: Kubernetes(K8S)超快速入门教程

1.1. 基本命令

  • 准备:

    # 检查kubectl是否安装
        rpm -qa | grep kubectl
    # 查看 帮助
        kubectl --help
    
    # 环境准备
    在master worker所有节点上面, 用户的家目录下面 创建 .kube  
        scp master1:/root/.kube/config .kube/
    
    # config文件来自于master节点 /etc/ 目录下
        cp /etc/kubernetes/admin.conf ./.kube/config
    
    
  • 子命令 汇总:
    20210818000414
    20210818000540


1.2. 命令详解


2. NameSpace 命名空间


2.1. 用途

  • 用途:
    1. 在 k8s 集群中运行两套环境, 实现开发测试与预发布环境的隔离;
    2. 多租户 情况下, 实现资源隔离;
    3. 属于 逻辑隔离;
    4. 属于 管理边界;
    5. 不属于 网络边界;
    6. 可以针对每个namespace做资源分配;

2.2. 基本命令

  • 基本命令:

    # == 查看 NameSpace ==
        kubectl get namespace
    
        kubectl get ns        # 简写
            default       用户创建的pod默认在此命名空间 
            kube-public   所有用户均可以访问,包括未认证用户 
            kube-node-lease   kubernetes集群节点租约状态 
                                v1.13加入 kube-system       kubernetes集群在使用
    
    # == 创建 NameSpace ==
        # kubectl 创建
            [root@k8s-master1 ~]# kubectl create namespace test
            namespace/test created
        # yaml 文件创建
            cat 01-create-ns.yaml  #具体文件内容见后面
            kubectl apply -f 01-create-ns.yaml  # 应用文件
    
    # == 删除 NameSpace ==
        删除namespace时, 其中所包含的所有资源都会被删除;
        # kubectl 命令删除
            [root@k8s-master1 yamldir]# kubectl delete namespace test
            namespace "test" deleted
                # 调用api, 执行速度较慢;
        # yaml文件删除
            [root@k8s-master1 yamldir]# kubectl delete -f 01-create-ns.yaml
            namespace "demons1" deleted
    
    
    
  • yaml文件

    # 01-create-ns.yaml
    apiVersion: v1
    kind: Namespace
    metadata: 
        name: demons1
    
    # 
    
    
    

3. Pod


3.1. 概述

  • 理解

    1. pod: 豆荚;
    2. docker: 豆粒;
    3. pod 是k8s集群中最小调度单元;
    4. Pod 是容器的封装;
      20210819124505
  • 概述:


3.2. 基本命令

  • 基本命令:

    # == 查看Pod方法 ==
        # 查看 default namespace中的Pod
            kubectl get pod
            kubectl get pods
                No resources found in default namespace.
        # 指定namespace
            kubectl get pod --namespace default
            kubectl get pods --namespace default
            kubectl get pod -n kube-system  #-n 
        # 查看pod详细信息
            kubectl get pods -o wide
                NAME   READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
                pod1   1/1     Running   0          3m27s   10.224.194.65   k8s-worker1   <none>           <none>
    
    
    # == 创建Pod ==
        # yaml创建pod
            kubectl apply -f 02-create-pod.yaml
            kubectl apply -f 02-create-pod.yaml    # 应用命令
                pod/pod1 created
    
    # == Pod访问 ==
        curl http://172.16.1.2     #指定ip
    
    # == Pod删除 == 
        # 命令删除
            kubectl delete pods pod1
        # yaml文件
            kubectl delete -f 02-create-pod.yaml
    
    
  • 相关 yaml文件

    #02-create-pod.yaml
    apiVersion: v1
    kind: Pod
    metadata: 
        name: pod1
    spec:
        containers:
        -   name: nginx-pod
            image: nginx:latest
            ports:
            -   name: nginxport
                containerPort: 80
    

4. Controller


4.1. 概述

  • 作用:

    1. k8s集群中以loop方式监控Pod状态;
    2. 若发现 pod 被删除, 重新拉起一个pod, 以保证pod处于用户期望状态;
  • 分类:
    20210819142451


4.2. Deployment控制器

  • 概述

    1. 具有上线部署、滚动升级、创建副本、回滚到以前某一版本(成功/ 稳定)等功能;
    2. Deployment包含ReplicaSet,除非需要自定义升级功能或者根本不需要升级Pod,
      否则还是建议使用Deployment而不直接使用Replica Set 。
  • 基本命令:

    # == 创建控制器 ==
        # 命令行创建
            kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=2
                # nginx-app 是deployment控制器类型的应用名称
                # nginx:latest 是所使用的镜像;
                # --replicas=2 指运行的pod共有2个副本;
                    # 是 用户的期望值,Deployment控制器中的ReplicaSet控制器会 一直监控此应用运行的Pod副本状态,
                    #如果数量达不到用户期 望,就会重新拉起一个新的Pod,会让Pod数量一直维持在用户期望值数量。
        # yaml文件
            kubectl apply -f 03-creat- deployment-app.yaml
    
    # == 查看 ==
        # 查看 deployment 控制器类型
            [root@k8s-master1 ~]# kubectl get deployment.apps
            NAME        READY   UP-TO-DATE   AVAILABLE   AGE
            nginx-app   2/2     2            2           102s
    
        # 查看 replicaset 控制器类型
            kubectl get replicaset
    
    # == 删除控制器 == 
        带有控制器类型的Pod不能随便删除,如果必须删除,请删除控制器类型的应用名称。
        # 命令行 
            kubectl delete deployment.apps nginx-app
        # yaml文件
            kubectl delete -f 03-creat- deployment-app.yaml
    
    
  • 相关yaml:

    # 03-create-deployment-app.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata: 
        name: nginx-apps
        labels: 
            app: nginx
    spec:
        replicas: 1
        selector:
            matchLabels:
                app: nginx
        template:
            metadata:
                labels:
                    app: nginx
            spec:
                containers:
                -   name: nginxapp
                    image: nginx:latest
                    imagePullPolicy: IfNotPresent
                    ports:
                    - containerPort: 80
    

5. service


5.1. 概述

  • 概述:

    1. 不是实体服务;
    2. 是一条 iptables或ipvs 的转发规则;
  • 作用:

    1. 为 pod 客户端提供访问pod的方法, 即客户端访问pod入口 ;
    2. 通过 pod标签 与pod进行关联;
  • 分类:

    1. ClusterIP
      默认,分配一个集群内部可以访问的虚拟IP
    2. NodePort
      在每个Node上分配一个端口作为外部访问入口
    3. LoadBalancer
      工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack
    4. ExternalName
      表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信;
  • 参数说明:

    port        访问service的端口
    targetPort  Pod中容器端口
    NodePort    通过Node实现外网用户访问k8s集群内service(30000-32767)
    

5.2. 基本命令

  • 基本命令

    # == 创建service ==
        # 命令行
            默认创建service ClusterIP类型
            # 创建 deployment应用
                kubectl run nginx-app --image=nginx:latest --image-pull-policy=IfNotPresent --replicas=1
            # 创建service
                kubectl expose deployment.apps nginx-app --type=ClusterIP --target-port=80 --port=80
                # 参数:
                    expose          创建service 
                    deployment.apps 控制器类型 
                    nginx-app       应用名称,也是service名称 
                    --type=ClusterIP    指定service类型 
                    --target-port=80    指定Pod中容器端口 
                    --port=80           指定service端口
        # yaml文件
            kubectl apply -f create-deployment-service-nodeport.yaml
    
    # == 访问service ==
        kubectl get service  # 验证对象创建
    
        # 查看k8s集群所有主机30001端口监听状态
            ss -anput | grep ":30001"
        # 在物理浏览器中验证:
    
    # == 删除 service ==
        kubectl delete service nginx-app
        kubectl delete -f create- deployment-service-clusterip.yaml
    
    
  • 相关yaml

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata: 
        name: nginx-app-nodeport
        labels: 
            apps: nginx-app4
    spec:
        replicas: 2
        selector:
            matchLabels:
                apps: nginx-app4
        template:
            metadata:
                labels:
                    apps: nginx-app4
            spec:
                containers:
                -   name: nginxapp4
                    image: nginx:latest
                    imagePullPolicy: IfNotPresent
                    ports:
                    - containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata: 
        name: nginx-app4-svc
    spec:
        selector: 
            apps: nginx-app4
        type: NodePort
        ports:
        -   protocol: TCP
            nodePort: 30001
            port: 80
            targetPort: 80
    
    

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值