环境配置

Linux

安装Docker

Docker学习笔记

安装kubectl

  • 下载安装
    curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    
  • sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
  • 验证安装是否成功:
    $ kubectl version --client
    
    在这里插入图片描述
    ref: Install and Set Up kubectl on Linux

安装minikube

  • 根据官方的Manual安装即可。
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube
    
    minikube start
  • 执行minikube start
    在这里插入图片描述
    在进行一系列必要的下载安装后,即可正常启动。
    注意: 默认下载的是国外的镜像,如果有被墙的话,可以使用国内阿里云的镜像
    minikube start --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
    

macOS

  1. 安装docker:brew install --cask docker
  2. 安装kubectl:brew install kubectl
  3. 安装minikube:brew install minikube

常用操作

  • 启动k8s:
    minikube start

  • 查看状态
    minikube status

  • 获取集群名字

    $ kubectl config view
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: DATA+OMITTED
        server: https://kubernetes.docker.internal:6443
      name: docker-desktop
    contexts:
    - context:
        cluster: docker-desktop
        user: docker-desktop
      name: docker-desktop
    current-context: docker-desktop
    kind: Config
    preferences: {}
    users:
    - name: docker-desktop
      user:
        client-certificate-data: REDACTED
        client-key-data: REDACTED	
    

    或者

    $ kubectl config view --minify -o jsonpath='{.clusters[].name}'
    docker-desktop
    
    $ kubectl config get-contexts
    CURRENT   NAME             CLUSTER          AUTHINFO         NAMESPACE
    *         docker-desktop   docker-desktop   docker-desktop
    
  • 查看命令空间(namespace):
    kubectl get namespace

  • kubectl get cs:查看组件健康状态

  • 查看节点状态

    $ kubectl get nodes -o wide
    NAME             STATUS   ROLES                  AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION     CONTAINER-RUNTIME
    docker-desktop   Ready    control-plane,master   58d   v1.21.5   192.168.65.4   <none>        Docker Desktop   5.10.47-linuxkit   docker://20.10.10
    

    ⚠️下述很多指令都可以在最后加上 -n [namespace] ,指定命令空间

  • 获取节点node描述信息

    $ kubectl describe node --v=9 // 使用--v=9参数可以看到CLI访问的RESTAPI
    
  • 通过配置文件名或stdin创建一个集群资源对象
    kubectl create -f [yaml/json]

  • 获取所有服务信息:
    kubectl get svc

  • 获取集群pods信息:
    kubectl get pods -A
    -A: 表示所有的namespace

  • 获取pod更加详细信息:
    kubectl get pods -o wide

  • 查看k8s资源状态:
    资源包括(不区分大小写): pod(po),service(svc),replication controller(rc),deployment(deploy),replica set(rs), DaemonSet(ds),endpoint(ep),PersistentVolumeClaim(pvc)PersistentVolume(pv)

    $ kubectl get rs,deployment,pod,job --all-namespaces
    
  • 创建一个pod实例
    kubectl apply -f *.yml/json
    一份简单的pod yaml配置:

    apiVersion: v1
    kind: Pod
    metadata:
      name: test
    spec:
      containers:
      - name: test
        image: library/busybox
        command: ["/bin/sh"]
        args: ["-c", "while true; do echo hello; sleep 10;done"]
    

    在这里插入图片描述

  • 删除pod:
    kubectl delete pod [pod name]

  • 删除pod的任务,避免pod重试:
    kubectl delete job [pod name的前缀]

  • 进入pod容器内部(这个pod得在runing状态):

    kubectl exec -it [pod name] -- /bin/bash
    kubectl exec -it [pod name] /bin/bash
    
  • 进入一个正在运行包含多容器的pod

    kubectl exec -it [pod] -c [container-name] /bin/bash
    
  • 获取一个pod的日志输出
    kubectl logs [pod]

  • 实时获取pod日志

    kubectl logs -f pod/pod-name --tail=1
    
  • 描述一个pod的状态
    kubectl describe [pod]

  • 查看pods的label信息
    kubectl get pods --show-labels

  • 查看一个pod的配置信息yaml
    kubectl get pods [pod name] -o yaml 在这里插入图片描述

  • kubectl expose
    将资源暴露为新的Kubernetes Service。
    示例:为RC的nginx创建service,并通过Service的80端口转发至容器的8000端口上。

    $ kubectl expose rc nginx --port=80 --target-port=8000
    
  • kubectl port-forward
    ref 端口转发
    可以将本地端口转发到指定的 Pod 端口上。
    也可以将本地端口转发到服务(svc)、复制控制器(rs)或者部署(deploy)的端口。

    示例1: 将本地工作站上的 6379 端口转发到 redis-master pod 的 6379 端口:

    $ kubectl port-forward redis-master 6379:6379
    

    示例2:

    # Forward to deployment
    kubectl port-forward deployment/redis-master 6379:6379
    
    # Forward to replicaSet
    kubectl port-forward rs/redis-master 6379:6379
    
    # Forward to service
    kubectl port-forward svc/redis-master 6379:6379
    
  • 打上标签label

    # 示例是给node打上标签
    # kubectl label nodes <node_name> key1=val1 key2=val2
    # kubectl label nodes 10.2.2.123 key1=val1
    # kubectl label nodes 10.2.2.123 key2=val2
    # kubectl label nodes 10.2.2.123 key1=val1 key2=val2
    
  • 修改pod的label信息
    kubectl label pods [pod name] [k=v] --overwrite
    在这里插入图片描述

  • 删除标签
    kubectl label pods [pod name] [key]-
    删除多个标签: kubectl label node/docker-desktop label1- label2-
    在这里插入图片描述

  • 查看label
    查看所有pod的lablel: kubectl get pods --show-labels -l [筛选条件]
    查看指定node label: kubectl get node/docker-desktop --show-labels
    查看指定pod label: kubectl get pod/docker-desktop --show-labels
    在这里插入图片描述

MEMO

修改更新运行中的资源

  • 修改运行中的pod某个资源的配置并更新:
    kubectl -n kube-system edit pod testpod -o yaml --save-config
    或者
    kubectl edit pod kube-controller-manager-docker-desktop -o yaml --save-config -n kube-system
    
  • 如果自动升级失败,会备份一份修改后的yaml文件,用备份的yaml文件替换更新即可;
    kubectl replace --force -f /tmp/kubectl-edit-26wwg.yaml
    会先delete之前的,然后重新生成新的pod

获取controler

在yaml文件中会有:
Controlled By: DaemonSet/test

在pod中注入的环境变量均为字符串类型

env:
- name: PORT
  value: "1234"
Logo

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

更多推荐