ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-08-11 21:02:40  阅读:233  来源: 互联网

标签:kubectl Kubernetes kubernetes get 1.2 minikube World Hello 1.1


目录

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}}{{"\n"}}{{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}}{{"\n"}}{{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}}{{"\n"}}{{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`

标签:kubectl,Kubernetes,kubernetes,get,1.2,minikube,World,Hello,1.1
来源: https://www.cnblogs.com/lshare/p/11336680.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有