kubernetes基础实验

使用Minikube创建集群

Minikube是一个轻量级的Kubernets实现,会在本机创建一台虚拟机,并部署一个只包含一个节点的简单集群。Minikube CLI提供了集群的基本引导操作,包括启动、停止、状态和删除。

查看minikube版本:

minikube version

启动集群:

minikube start

查看客户端和服务器版本:

kubectl version

客户端版本是kubectl版本,服务器版本是Kubernetes版本。
查看集群详细信息:

kubectl cluster-info

查看node节点:

kubectl get nodes

使用kubectl创建部署

使用--help查看命令说明:

kubectl get nodes --help

部署应用:

kubectl run kubernetes-bootcamp --image=grc.io/google-samples/kubernetes-bootcamp:v1 --port=8000

执行上面的命令会自动找一个合适的节点部署应用。

获取所有的应用:

kubectl get deployments

Pods是运行在一个独立的网络中,默认是对kubenetes内部的其它pods和服务可见,对外部不可见。
使用proxy可以将集群和主机建立连接:

kubectl proxy

这样就可以通过代理终端访问所有的API:

curl http://localhost:8001/version

API服务器会自动为每个pod创建一个终端,可以通过代理访问:

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/

查看Pods和节点

查看日志:

kubectl logs $POD_NAME

查看环境变量:

kubectl exec $POD_NAME env

开启bash:

kubectl exec -ti $POD_NAME bash

查看引用的源码:

cat server.js

检查应用是否启动:

curl localhost:8080

使用服务发布应用程序

创建新的服务

确保应用正在运行,列出当前存在的pod:

kubectl get pods
NAME                                   READY     STATUS    RESTARTS   AGE
kubernetes-bootcamp-5c69669756-fbbl8   0/1       Pending   0          3s

列出集群当前的服务:

kubectl get services
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   36s

创建一个新的服务,并将它暴露在集群之外:

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

重新查询服务,会发现刚才暴露的服务在列表中:

kubectl get service
NAME                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes            ClusterIP   10.96.0.1       <none>        443/TCP          1m
kubernetes-bootcamp   NodePort    10.110.72.205   <none>        8080:31979/TCP   5s

查看什么端口暴露在外部:

kubectl describe services/kubernetes-bootcamp
Name:                     kubernetes-bootcamp
Namespace:                default
Labels:                   run=kubernetes-bootcamp
Annotations:              <none>
Selector:                 run=kubernetes-bootcamp
Type:                     NodePort
IP:                       10.110.72.205
Port:                     <unset>  8080/TCP
TargetPort:               8080/TCP
NodePort:                 <unset>  31979/TCP
Endpoints:                172.18.0.4:8080
Session Affinity:         None
External Traffic Policy:  Cluster
Events:                   <none>

创建NODE_PORT的环境变量,并且指定为Node端口值:

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

echo NODE_PORT=$NODE_PORT
NODE_PORT=31979

现在通过curl测试应用是否暴露在外部:

curl $(minikube ip):$NODE_PORT

使用标签

pods会被自动创建一个标签,可以使用describe查看:

kubectl describe deployment

使用-l参数指定标签查询pod:

kubectl get pods -l run=kubernetes-bootcamp

同样,可以使用-l参数查询服务:

kubectl get services -l run=kubernetes-bootcamp

获取pod的名字,并将它放在POD_NAME环境变量中:

export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')

echo Name of the Pod: $POD_NAME

给pod指定新的标签:

kubectl label pod $POD_NAME app=v1

查看pod是否被指定新的标签:

kubectl describe pods $POD_NAME

使用新的标签获取pod:

kubectl get pods -l app=v1

删除服务

删除服务:

kubectl delete service -l run=kubernetes-bootcamp

确认服务是否被删除:

kubectl get services

确认路由不再暴露在外部:

curl $(minikube ip):$NODE_PORT
curl: (7) Failed to connect to 172.17.0.142 port 31979: Connection refused

这个结果说明应用不再能被外部访问,确认服务依然可以被pod内部访问:

kubectl exec -ti $POD_NAME curl localhost:8080

扩展应用

扩展deployment

列出deployments:

kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1         1         1            1           2m
  • DESIRED: 配置的复制品数量
  • CURRENT: 当前运行的复制品数量
  • UP-TO-DATE: 更新到期望状态的复制品数量
  • AVAILABLE: 可以使用的复制品数量

将deployment扩展到四个复制品:

kubectl scale deployments/kubernetes-bootcamp --replicas=4

再次列出deployments:

kubectl get deployments
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4         4         4            4           15m

检查pod数量是否改变:

kubectl get pods -o wide
NAME                                   READY     STATUS    RESTARTS   AGE       IP           NODE
kubernetes-bootcamp-5c69669756-k5dzj   1/1       Running   0          2m        172.18.0.5   minikube
kubernetes-bootcamp-5c69669756-pds6q   1/1       Running   0          2m        172.18.0.7   minikube
kubernetes-bootcamp-5c69669756-qxght   1/1       Running   0          2m        172.18.0.6   minikube
kubernetes-bootcamp-5c69669756-xfjd2   1/1       Running   0          17m       172.18.0.2   minikube

可以看到现在有4个Pod了,并且有不同的IP地址。使用describe进行检查:

kubectl describe deployments/kubernetes-bootcamp

负载均衡

查看暴露的IP和端口:

kubectl describe services/kubernetes-bootcamp

获取node端口:

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命令可以看到,到达的是不同的pod,说明实现了负载均衡。

收缩deployment

命令和扩展基本相同:

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

应用更新

更新应用的版本

首先,查看当前的版本情况:

kubectl get deployments
kubectl get pods
kubectl describe pods

更新应用的镜像到版本2,使用set image:

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

这个命令会为应用使用一个新的镜像,重新查看pod:

kubectl get pods

确认更新

确认应用在运行,查看IP和端口:

kubectl describe services/kubernetes-bootcamp

获取和查看node端口:

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

可以看到多次请求会到达不同的pod,并且可以看到所有的pod都是在运行版本2

还可以使用rollout来确认更新:

kubectl rollout status deployments/kubernetes-bootcamp

查看当前镜像的版本:

kubectl describe pods

回滚更新

首先更新应用:

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10

然后查看当前情况:

kubectl get deployments
kubectl get pods
kubectl describe pods

接着进行回滚:

kubectl rollout undo deployments/kubernetes-bootcamp

最后查看回滚情况:

kubectl get pods
kubectl describe pods

猜你喜欢

转载自www.cnblogs.com/suraer/p/9049986.html
今日推荐