• 【Kubernetes 系列四】Kubernetes 实战:管理 Hello World 集群


    1. 创建集群

    1.1. 安装 kubectl

    kubectl 是 Kubernetes 的命令行工具,可以通过跑命令来控制整个 Kubernetes 集群。

    注意:kubectl 的版本要确保与 Kubernetes 最多上下相差一个小版本。安装最新的版本可以无视此项规定。

    1.1.1. 安装 kubectl 到 Linux

    1.1.1.1. 安装二进制版本

    curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin/kubectl
    kubectl version
    

    1.1.1.2. 使用本地包管理器

    1.1.1.2.1. Ubuntu, Debian or HypriotOS
    sudo apt-get update && sudo apt-get install -y apt-transport-https
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
    echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
    sudo apt-get update
    sudo apt-get install -y kubectl
    
    1.1.1.2.2. CentOS, RHEL or Fedora
    cat <<EOF > /etc/yum.repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
    enabled=1
    gpgcheck=1
    repo_gpgcheck=1
    gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
    EOF
    yum install -y kubectl
    

    1.1.2. 安装 kubectl 到 macOS

    1.1.2.1. 安装二进制版本

    curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin/kubectl
    kubectl version
    

    1.1.2.2. 使用 Homebrew 安装

    brew install kubernetes-cli
    

    1.1.3. 安装 kubectl 到 Windows

    1.1.3.1. 安装二进制版本

    curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.15.0/bin/windows/amd64/kubectl.exe
    // 添加二进制文件到环境变量 PATH 中
    kubectl version
    

    1.1.4. 添加命令自动补全支持

    1.1.4.1. Zsh

    自动补全的脚步可以通过 kubectl completion zsh 查看。下面是配置步骤:

    在 ~/.zshrc 文件中添加

    source <(kubectl completion zsh)
    

    如果出现 complete:13: command not found: compdef 之类的错误,就在 ~/.zshrc 文件开头添加

    autoload -Uz compinit
    compinit
    

    1.2. 安装 Minikube

    Minikube 可以在本地环境中的虚拟机上快速部署一个单节点的 Kubernetes 集群。

    1.2.1. 确保系统支持虚拟化技术

    1.2.1.1. Linux

    执行以下命令,当输出不为空时即可。

    egrep --color 'vmx|svm' /proc/cpuinfo
    

    1.2.1.2. macOS

    执行以下命令,当输出不为空时即可。

    sysctl -a | grep machdep.cpu.features | grep VMX
    

    1.2.1.3. Windows

    执行以下命令

    systeminfo
    

    当输出以下内容时,系统支持虚拟化技术。

    Hyper-V Requirements:     VM Monitor Mode Extensions: Yes
                              Virtualization Enabled In Firmware: Yes
                              Second Level Address Translation: Yes
                              Data Execution Prevention Available: Yes
    

    当输出以下内容时,系统支持虚拟化技术,并且 Hypervisor 已经安装了,可以忽略下个步骤。

    Hyper-V Requirements:     A hypervisor has been detected. Features required for Hyper-V will not be displayed.
    

    1.2.2. 安装 Hypervisor

    1.2.2.1. Linux

    当系统没有安装 Hypervisor 时,选择下列其中的一个安装即可。

    1.2.2.2. macOS

    当系统没有安装 Hypervisor 时,选择下列其中的一个安装即可。

    1.2.2.3. Windows

    当系统没有安装 Hypervisor 时,选择下列其中的一个安装即可。

    1.2.3. 安装 Minikube

    1.2.3.1. Linux

    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 
      && chmod +x minikube
    sudo install minikube /usr/local/bin
    

    1.2.3.2. Mac

    使用 Homebrew

    brew cask install minikube
    

    使用二进制文件

    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 
      && chmod +x minikube
    sudo mv minikube /usr/local/bin
    

    1.2.3.3. Windows

    使用安装器下载并运行 minikube-installer.exe

    2. 启动集群

    运行 minikube start ,如提示 machine does not exist,则运行 minikube delete 清理本地状态。

    3. 启动 Dashboard

    运行 minikube dashboard 会自动启动一个网页,在里面可以管理整个集群。

    4. 部署一个应用

    以下过程可以通过 Module 2 - Deploy an app,在线交互式地完成。

    4.1. 查看所有节点及其状态

    kubectl get nodes
    

    4.2. 部署 Hello World 应用

    kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
    

    通过以下查看部署的应用及状态,等待状态变为 Ready 。

    kubectl get deployments
    

    4.3. 创建代理,直连 Pod

    可以通过以下命令创建一个代理,直接连接部署的 Pod 进行访问,这是暂时的,后面我们会使用 NodePort、LoadBalancer 等方式暴露服务。

    kubectl proxy
    

    通过以下命令查看Kubernetes 版本,测试代理是否成功。

    curl http://localhost:8001/version
    

    4.4. 访问部署的应用

    export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"
    "}}{{end}}')
    echo Name of the Pod: $POD_NAME
    curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
    

    5. 探索你的应用

    以下过程可以通过 Module 3 - Explore your app,在线交互式地完成。

    5.1. 获取集群 Pod 信息

    通过以下命令,可以获取集群中所有 Pod 的信息,包含名称、名称空间、优先级、节点、状态、IP、容器、卷、事件等等。

    kubectl describe pods
    

    5.2. 查看容器日志

    export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"
    "}}{{end}}')
    echo Name of the Pod: $POD_NAME
    kubectl logs $POD_NAME
    

    5.3. 在容器中执行命令

    使用 kubectl 的 exec 指令,可以在容器中执行命令。因为我们之前部署的是单容器的 Pod,因此可以不用指定容器,使用 Pod Name 即可。如果多容器的话可以通过 -c 指定 Container。

    kubectl exec $POD_NAME env
    

    还可以直接打开容器内的 bash 进行交互,如下。

    kubectl exec -ti $POD_NAME bash
    ls
    cat server.js
    curl localhost:8080
    exit
    

    6. 对外暴露你的应用

    以下过程可以通过 Module 4 - Expose your app publicly,在线交互式地完成。

    6.1. 通过 NodePort 方式创建服务

    kubectl get pods
    kubectl get services
    // type 可选值:ClusterIP、NodePort、LoadBalancer
    kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
    kubectl get services
    export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
    curl $(minikube ip):$NODE_PORT
    

    6.2. 打标签

    使用 kubectl label 可以给 deployment、pod 以及 service 等等打标签,随后可以通过 kubectl get [deployment | pods | services | svc] -l 过滤带有指定标签的部署、Pod 或者服务等等。

    // 给 Pod 打标签
    export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"
    "}}{{end}}')
    echo Name of the Pod: $POD_NAME
    kubectl label pod $POD_NAME app=v1
    // 描述 Pod
    kubectl describe pods $POD_NAME
    // 使用标签过滤 Pod
    kubectl get pods -l app=v1
    

    6.3. 删除一个服务

    // 删除服务
    kubectl delete service -l run=kubernetes-bootcamp
    // 列出现有服务
    kubectl get services
    // 外部不可访问
    curl $(minikube ip):$NODE_PORT
    // 内部可以访问
    kubectl exec -ti $POD_NAME curl localhost:8080
    

    7. 扩充你的应用

    以下过程可以通过 Module 5 -Scaling Your App,在线交互式地完成。

    7.1. 扩充 Deployment

    kubectl get deployments
    kubectl scale deployments/kubernetes-bootcamp --replicas=4
    kubectl get deployments
    kubectl get pods -o wide
    kubectl describe deployments/kubernetes-bootcamp
    

    7.2. 负载均衡

    扩充后,Service 是负载均衡的,测试如下:

    kubectl describe services/kubernetes-bootcamp
    export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
    echo NODE_PORT=$NODE_PORT
    curl $(minikube ip):$NODE_PORT
    curl $(minikube ip):$NODE_PORT
    curl $(minikube ip):$NODE_PORT
    

    7.3. 收缩 Deployment

    kubectl scale deployments/kubernetes-bootcamp --replicas=2
    kubectl get deployments
    kubectl get pods -o wide
    

    8. 更新你的应用

    以下过程可以通过 Module 6 -Updating Your App,在线交互式地完成。

    8.1. 更新应用版本

    更新应用时,系统会扩充 Deployment,然后部署新镜像,旧的 Deployment 进入Terminating 状态。流量仅会在可用的 Deployments 之间负载均衡。

    kubectl get deployments
    kubectl get pods
    kubectl describe pods
    kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
    kubectl get pods
    

    8.2. 验证更新

    // 通过响应内容验证
    kubectl describe services/kubernetes-bootcamp
    export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
    echo NODE_PORT=$NODE_PORT
    curl $(minikube ip):$NODE_PORT
    
    // 通过 rollout status 查看升级进度
    kubectl rollout status deployments/kubernetes-bootcamp
    
    kubectl describe pods
    

    注意:当且仅当 Deployment 中的 pod template(例如.spec.template) 中的 label 更新或者镜像更改时触发 rollout。

    8.3. 回滚更新

    kubectl rollout undo deployments/kubernetes-bootcamp
    

    9. 删除你的应用

    9.1. 删除服务

    kubectl delete service kubernetes-bootcamp
    

    9.2. 删除部署

    kubectl delete deployment kubernetes-bootcamp
    

    10. 停用集群

    minikube stop
    

    11. 删除集群

    minikube delete
    
  • 相关阅读:
    Shell 丢弃错误和输出信息
    awk 循环过滤EPC脚本
    Tornado 异步浅解
    返回顶部
    Tornado 的安全性保障机制Cookie XSRF跨站请求伪造阻断 &用户验证机制
    Nginxre quest_time 和upstream_response_time
    Tornado WEB服务器框架 Epoll-- 【Mysql数据库】
    Tornado WEB服务器框架 Epoll-- 【模板】
    常见的SQL等价改写
    redis配置信息详解
  • 原文地址:https://www.cnblogs.com/lshare/p/11336680.html
Copyright © 2020-2023  润新知