热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

目录1.创建集群1.1.安装kubectl1.1.1.安装kubectl到Linux1.1.1.1.安装二进制版本1.1.1.2.使用本地包管理器1.1.1.2.1.Ubuntu,

目录



  • 1. 创建集群

    • 1.1. 安装 kubectl

      • 1.1.1. 安装 kubectl 到 Linux

        • 1.1.1.1. 安装二进制版本

        • 1.1.1.2. 使用本地包管理器

          • 1.1.1.2.1. Ubuntu, Debian or HypriotOS

          • 1.1.1.2.2. CentOS, RHEL or Fedora





      • 1.1.2. 安装 kubectl 到 macOS

        • 1.1.2.1. 安装二进制版本

        • 1.1.2.2. 使用 Homebrew 安装



      • 1.1.3. 安装 kubectl 到 Windows

        • 1.1.3.1. 安装二进制版本



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

        • 1.1.4.1. Zsh





    • 1.2. 安装 Minikube

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

        • 1.2.1.1. Linux

        • 1.2.1.2. macOS

        • 1.2.1.3. Windows



      • 1.2.2. 安装 Hypervisor

        • 1.2.2.1. Linux

        • 1.2.2.2. macOS

        • 1.2.2.3. Windows



      • 1.2.3. 安装 Minikube

        • 1.2.3.1. Linux

        • 1.2.3.2. Mac

        • 1.2.3.3. Windows







  • 2. 启动集群

  • 3. 启动 Dashboard

  • 4. 部署一个应用

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

    • 4.2. 部署 Hello World 应用

    • 4.3. 创建代理,直连 Pod

    • 4.4. 访问部署的应用



  • 5. 探索你的应用

    • 5.1. 获取集群 Pod 信息

    • 5.2. 查看容器日志

    • 5.3. 在容器中执行命令



  • 6. 对外暴露你的应用

    • 6.1. 通过 NodePort 方式创建服务

    • 6.2. 打标签

    • 6.3. 删除一个服务



  • 7. 扩充你的应用

    • 7.1. 扩充 Deployment

    • 7.2. 负载均衡

    • 7.3. 收缩 Deployment



  • 8. 更新你的应用

    • 8.1. 更新应用版本

    • 8.2. 验证更新

    • 8.3. 回滚更新



  • 9. 删除你的应用

    • 9.1. 删除服务

    • 9.2. 删除部署



  • 10. 停用集群

  • 11. 删除集群


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 < /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 时,选择下列其中的一个安装即可。



  • KVM, which also uses QEMU

  • VirtualBox


1.2.2.2. macOS

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



  • HyperKit

  • VirtualBox

  • VMware Fusion


1.2.2.3. Windows

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



  • Hyper-V (只支持 Win10 企业版本、专业版和教育版)

  • VirtualBox


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


本作品地址: https://www.cnblogs.com/lshare/p/11336680.html,作者: 東籬老農,採用知識共享署名 4.0 國際許可協議進行許可。



推荐阅读
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 微信答题小程序的设计与实现详解
    本文详细介绍了如何设计和实现一个微信答题小程序,包括题库的设计和题目的呈现。通过抽取题目编号和使用全局变量记录当前题目的信息,实现了题目的刷新和显示。同时,还介绍了题目的展示方式和容器的创建。本文适合零基础的小白学习微信答题小程序的开发。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 抖音服务器带宽有多大,才能供上亿人同时刷?
    最近看到一个有意思的提问:抖音服务器带宽有多大,为什么能够供那么多人同时刷?今天来给大家科普一下。 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • 如何查看电脑系统版本_腾讯云服务器系统版本怎么看?Windows和Centos版本怎么选?...
    腾讯云服务器系统版本怎么看?想要知道自己的腾讯云服务器系统版本是哪个,可以登录云服务器后台管理系统查看,或者使用命令行查询,如果不会操作& ... [详细]
author-avatar
韩国高防服务器
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有