每天5分钟玩转Kubernetes | 先把Kubernetes跑起来

书籍来源:cloudman《每天5分钟玩转Kubernetes》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:每天5分钟玩转Kubernetes | 汇总_COCOgsta的博客-CSDN博客


Kubernetes一直在快速开发和迭代。本书将以v1.7和v1.8为基础学习Kubernetes。我们会讨论Kubernetes重要的概念和架构,学习Kubernetes如何编排容器,包括优化资源利用、高可用、滚动更新、网络插件、服务发现、监控、数据管理、日志管理等。

1.1 先跑起来

kubernetes.io开发了一个交互式教程,通过Web浏览器就能使用预先部署好的一个Kubernetes集群,快速体验Kubernetes的功能和应用场景,下面我就带着大家去玩一下。

打开Learn Kubernetes Basics | Kubernetes。页面左边就能看到教程菜单

efc470e83f5821ca0025dca779949d5b.png

教程会指引大家完成创建Kubernetes集群、部署应用、访问应用、扩展应用、更新应用等最常见的使用场景,迅速建立感性认识。

1.2 创建Kubernetes集群

点击教程菜单Create a Cluster -> Interactive Tutorial - Creating a Cluster。

2f9dcf119beab3500d12d752423d1660.png

显示操作界面

3955764f411df6f11ba5767430c79f4c.png

左边部分是操作说明。右边是Terminal,即命令终端窗口。

按照操作说明,我们在Terminal中执行minikube start,然后执行kubectl get nodes,这样就创建好了一个单节点的Kubernetes集群。

230d0657254732c03628244b9812813d.png

集群的唯一节点为minikube,需要注意的是当前执行命令的地方并不是minikube。我们是通过Kubernetes的命令行工具kubectl远程管理集群。

执行kubectl cluster-info查看集群信息。

cd26ea35bb86a44cdac723c98e258453.png

新的页面已经没有heapster、kubernetes-dashboard。

1.3 部署应用

执行命令:

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

这里我们通过kubectl run部署了一个应用,命名为kubernetes-bootcamp。

Docker镜像通过--image指定,--port设置应用对外服务的端口。

d0027387233299285b89f56e508b6265.png

这里Deployment是Kubernetes的术语,可以理解为应用。

Kubernetes还有一个重要术语Pod。

Pod是容器的集合,通常会将紧密相关的一组容器放到一个Pod 中,同一个Pod中的所有容器共享IP地址和Port空间,也就是说它们在一个network namespace中。

Pod是Kubernetes调度的最小单位,同一Pod中的容器始终被一起调度。

运行kubectl get pods,查看当前的Pod。

ea203af8d065956357f1171d79eeccb0.png

kubernetes-bootcamp就是应用的Pod。

1.4 访问应用

默认情况下,所有Pod只能在集群内部访问。对于上面这个例子,要访问应用只能直接访问容器的8080端口。为了能够从外部访问应用,我们需要将容器的8080端口映射到节点的端口。

执行如下命令:

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

be6afbd422537bde37bc55702299b6de.png

执行命令kubectl get services,可以查看应用被映射到节点的哪个端口。

0147e791c874f5e2b27e313a37843aca.png

这里有两个service,可以将service暂时理解为端口映射,后面我们会详细讨论。

Kubernetes是默认的service,暂时不用考虑。kubernetes-bootcamp是我们应用的service,8080端口已经映射到minikube的31757端口,端口号是随机分配的,可以执行如下命令访问应用。

curl minikube:31757

7b79bfdf42b029432a98ae2be8339b4f.png

1.5 Scale应用

默认情况下应用只会运行一个副本,可以通过kubectl get deployments查看副本数。需要先创建deployment,执行以下命令,否则会出现“No resources found in default namespace.”错误。

kubectl create deployment kubernetes-bootcamp --image=docker.io/jocatalin/kubernetes-bootcamp:v1

773c94ee5b476574e94490dbc1b09c58.png

执行如下命令将副本数增加到3个。

kubectl scale deployment.apps/kubernetes-bootcamp --replicas=3

65a4fa4a0694f120df89c868922a5c1f.png

通过kubectl get pods可以看到当前Pod增加到3个。

b60a2e299672b2174fe3f97c36782288.png

需要将之前kuberctl run出来的services删除,执行kubectl delete services kubernetes-bootcamp,并重新执行kubectl expose
deployments/kubernetes-bootcamp --type="NodePort" --port 8080。

4d6b777222bf545ba3fd847a8216314e.png

通过curl访问应用,可以看到每次请求发送到不同的Pod,3个副本轮询处理,这样就实现了负载均衡。

098a0c96ce42c2b1108d1d607d061061.png

要scale down也很方便,执行下列命令。

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

d1a366d23a75d1212c435cc54474d16e.png

从图中可以看到,其中一个副本被删除了。

1.6 滚动更新

当前应用使用的image版本为v1,执行如下命令将其升级到v2, 结果如图所示。

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

69015b6fac523b237cb13014f29d19ff.png

通过kubectl get pods可以观察滚动更新的过程:v1的Pod被逐个删除,同时启动了新的v2 Pod。更新完成后访问新版本应用。

935a3f8a851464b7fc21e83475fd31ab.png

如果要回退到v1版本也很容易,执行kubectl rollout undo命令

kubectl rollout undo deployments/kubernetes-bootcamp

77e883bf58e2a5624834c8e17205378d.png

验证版本已经回退到v1。

1ed922254bca79256a8df703c3002c05.png

1.7 小结

至此,我们已经通过官网的交互式教程快速体验了Kubernetes的功能和使用方法。本书的其余章节将详细讨论Kubernetes的架构、典 型的部署方法、容器编排能力、网络方案、监控方案,帮助大家全面掌握Kubernetes的核心技能。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/124974513
今日推荐