kuberneteskubernetes入门


备注

Kubernetes是一个开源平台,用于跨主机集群自动部署,扩展和操作应用程序容器,提供以容器为中心的基础架构。

使用Kubernetes,您可以快速有效地响应客户需求:

  • 快速,可预测地部署应用程序。
  • 即时扩展您的应用程序。
  • 无缝推出新功能。
  • 仅使用您需要的资源来优化硬件的使用。

为什么我需要Kubernetes以及它能做什么?

Kubernetes可以在物理或虚拟机集群上安排和运行应用程序容器。但是,Kubernetes还允许开发人员“切断”物理和虚拟机,从以主机为中心的基础架构转变为以容器为中心的基础架构,从而提供容器固有的全部优势和优势。 Kubernetes提供了构建真正以容器为中心的开发环境的基础架构。

Kubernetes满足了生产中运行的应用程序的一些常见需求,例如:

  • 协同定位辅助进程,促进复合应用程序并保留每个容器的单应用程序模型,
  • 安装存储系统,
  • 分发秘密,
  • 应用健康检查,
  • 复制应用程序实例,
  • 水平自动缩放,
  • 命名和发现,
  • 负载均衡,
  • 滚动更新,
  • 资源监测,
  • 日志访问和摄取,
  • 支持内省和调试,以及
  • 身份和授权。

这提供了平台即服务(PaaS)的简单性和基础架构即服务(IaaS)的灵活性,并促进了跨基础架构提供商的可移植性。

版本

发布日期
1.7 2017年6月28日
1.6 2017年2月22日
1.5 2016年12月13日
1.4 2016年9月26日
1.3 2016年7月6日
1.2 2016年3月17日
1.1 2015年9月9日
1.0 2015年7月18日

配置kubectl

使用kubectl 命令控制Kubernetes集群。配置kubectl 的方法取决于Kubernetes的安装位置。

Google Cloud(容器引擎)

要使用Google Cloud SDK安装kubectl,请执行以下操作:

gcloud components install kubectl
 

要配置kubectl以控制Container Engine中的现有Kubernetes集群:

gcloud container clusters get-credentials $CLUSTER_NAME
 

Minikube

使用minikube时,需要手动下载kubectl二进制文件并将其放在路径中。

# Version of Kubernetes.
K8S_VERSION=$(curl -sS https://storage.googleapis.com/kubernetes-release/release/stable.txt)
# Operating System. Can be one of {linux, darwin}
GOOS=linux
# Architecture. Can be one of {386, amd64, arm64, ppc641e}
GOARCH=amd64

# Download and place in path.
curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/${K8S_VERSION}/bin/${GOOS}/${GOARCH}/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
 

minikube二进制文件在启动集群时自动配置kubectl。

minikube start
# kubectl is now ready to use!
 

你好,世界

一旦您的Kubernetes集群运行并配置了kubectl ,您就可以通过几个步骤运行您的第一个应用程序。这可以使用不需要配置文件的命令式命令来完成。

要运行应用程序,您需要提供部署名称( bootcamp ),容器映像位置( docker.io/jocatalin/kubernetes-bootcamp:v1 )和端口( 8080

$ kubectl run bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1 --port=8080
 

确认它适用于:

$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
bootcamp               1         1         1            1         6s
 

要公开您的应用程序并使其可以从外部运行访问:

$ kubectl expose deployment/bootcamp --type="LoadBalancer" --port 8080
 

确认它适用于:

$ kubectl get services
NAME                  CLUSTER-IP   EXTERNAL-IP         PORT(S)    AGE
kubernetes            10.0.0.1     <none>              443/TCP    3m
bootcamp              10.3.245.61  104.155.111.170     8080:32452/TCP   2m
 

要访问服务,请使用外部IP和应用程序端口,例如:

$ export EXTERNAL_IP=$(kubectl get service bootcamp --output=jsonpath='{.status.loadBalancer.ingress[0].ip}')
$ export PORT=$(kubectl get services --output=jsonpath='{.items[0].spec.ports[0].port}')
$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-2fhnk | v=1
 

可以使用以下提供的数据手动完成相同的操作:

$ kubectl describe service bootcamp
Name:                   bootcamp
Namespace:              default
Labels:                 run=bootcamp
Selector:               run=bootcamp
Type:                   LoadBalancer
IP:                     10.3.245.61
LoadBalancer Ingress:   104.155.111.170
Port:                   <unset> 8080/TCP
NodePort:               <unset> 32452/TCP
Endpoints:              10.0.0.3:8080
... events and details left out ....

$ export NODE=104.155.111.170
$ export PORT=8080
 

一旦这样做,您可以扩展您的应用程序:

$ kubectl scale deployments/bootcamp --replicas=4
 

并检查结果:

$ kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
bootcamp               4         4         4            4         30s

$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-2fhnk | v=1
$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-390780338-gmtv5 | v=1
 

注意不断变化的pod id。

为了推出新的应用程序版本运行:

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

并确认:

$ curl "$EXTERNAL_IP:$PORT"
Hello Kubernetes bootcamp! | Running on: bootcamp-284539476-gafwev3 | v=2
 

清理最终完成:

$ kubectl delete deployment bootcamp
$ kubectl delete service bootcamp
 

在Google Cloud上安装

Kubernetes最初由谷歌开发,用于为其容器引擎供电。因此,Kubernetes集群是Google的一等公民。

在容器引擎中创建Kubernetes集群需要来自Google Cloud SDK的 gcloud 命令。要在本地安装此命令,请使用以下选项之一:

  • 使用交互式安装程序(对于新手来说最简单的方法):
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
 
curl -Lo gcloud-sdk.tar.gz https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-142.0.0-linux-x86_64.tar.gz
tar xvf ./gcloud-sdk.tar.gz
./google-cloud-sdk/install.sh
gcloud init
 

安装gcloud ,创建一个Kubernetes集群:

# Give our cluster a name
CLUSTER_NAME=example-cluster

# Number of machines in the cluster.
NUM_NODES=3
    
gcloud container clusters create $CLUSTER_NAME --num_nodes=$NUM_VMS
 

安装Minikube

Minikube创建了一个本地的虚拟机集群来运行Kubernetes。这是在本地计算机上使用Kubernetes弄脏手的最简单方法。

有关Minikube的文档,请访问http://kubernetes.io/docs/getting-started-guides/minikube/

要求

要检查是否已启用虚拟化支持,请从下面运行相应的命令。如果启用了虚拟化,该命令将输出一些内容。

# On Linux
cat /proc/cpuinfo | grep 'vmx\|svm'
# On OSX
sysctl -a | grep machdep.cpu.features | grep VMX
 

安装

Minikube是一个单独的二进制文件。因此,安装就像下载二进制文件并将其放在路径中一样简单。

# Specify the version of minikube to download.
# Latest version can be retrieved from 
# https://github.com/kubernetes/minikube/releases
VERSION=v0.16.0

# If on Linux
OS=linux  
# If on OSX
# OS=darwin

# URL to download minikube binary from
URL=https://storage.googleapis.com/minikube/releases/$VERSION/minikube-$OS-amd64

# Download binary and place in path.
curl -Lo minikube $URL 
chmod +x minikube 
sudo mv minikube /usr/local/bin/
 

用法

要启动新群集:

minikube start
 

这将创建一个新的本地虚拟机集群,其中已经安装并配置了Kubernetes。

您可以访问Kubernetes仪表板:

minikube dashboard
 

Minikube创建一个相关的背景kubectl 可用于:

kubectl config use-context minikube
 

准备好后,可以使用当地的Kubernetes:

kubectl run hello-minikube --image=gcr.io/google_containers/echoserver:1.4 --port=8080
kubectl expose deployment hello-minikube --type=NodePort
curl $(minikube service hello-minikube --url)
 

要停止本地群集:

minikube stop
 

要删除本地群集,请注意创建后将分配新IP:

minikube delete
 

Kubectl在命令行中

拥有正在运行的集群后,您可以使用kubectl 命令对其进行管理。您可以使用kubectl --help 命令获得大多数命令,但我向您展示了最常用的命令,用于管理和获取有关群集,节点,窗格,服务和标签的信息。


要获取有关群集的信息,您可以使用以下命令

kubectl cluster-info
 

它会显示正在运行的地址和端口。


要获取有关节点,窗格,服务等的简短信息或在群集中占有一席之地的任何资源,您可以使用以下命令

kubectl get {nodes, pods, services, ...}
 

每个资源的输出大多是一行。


要获得有关资源的详细说明,可以使用kubectldescribe 标志

kubectl describe {nodes, pods, ...}
 

部署的应用程序仅在群集内可见,因此如果要从群集外部获取输出,则应在终端和kubernetes群集之间创建路由。

kubectl proxy
 

它将打开一个API,我们可以从集群中获取所有内容。如果要获取用于获取信息的pod的名称,则应使用以下命令:

kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'
 

它将列出pod以供以后使用。

curl http://localhost:8001/api/v1/proxy/namespaces/default/pods/{pod_name}/
 

另外两个常见命令是从容器化应用程序中获取日志和执行命令。

kubectl logs {pod_name}
kubectl exec {pod_name} {command}
 

配置shell的选项卡完成可以通过以下方式完成:

source <(kubectl completion zsh)   # if you're using zsh
source <(kubectl completion bash)  # if you're using bash
 

或更多编程:

source <(kubectl completion "${0/-/}")