参考官网:https://kubernetes.io/docs/tutorials/
Kubernetes协调一个高度可用的计算机集群,这些计算机连接起来作为一个单元工作。
Kubernetes中的抽象允许您将容器化应用程序部署到集群,而无需将它们专门绑定到单个计算机上。为了利用这种新的部署模型,应用程序需要以一种将它们与单个主机分离的方式打包:它们需要集装箱化。与过去的部署模型相比,容器化应用程序更加灵活和可用,其中应用程序直接安装到特定计算机上,因为程序包深度集成到主机中。Kubernetes以更有效的方式自动化跨集群分发和调度应用程序容器。
1.创建集群
安装官网步骤安装完环境后,就开始创建一个集群。
minikube start --vm-driver=xhyve
2.部署应用程序(deployments)
一旦运行了Kubernetes集群,就可以在其上部署容器化应用程序。创建Kubernetes Deployment配置。
获取节点信息:
kubectl get nodes
创建第一个应用
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
查看是否成功
kubectl get deployments
查看单个
kubectl describe deployments/applicationstore
创建应用程序实例后,Kubernetes Deployment Controller会持续监视这些实例。如果托管实例的节点关闭或被删除,则Deployment控制器会替换它。这提供了一种自我修复机制来解决机器故障或维护问题。
创建部署时,Kubernetes创建了一个Pod来托管您的应用程序实例。Pod是一个Kubernetes抽象,表示一组一个或多个应用程序容器(如Docker或rkt),以及这些容器的一些共享资源。
Pod中的容器共享IP地址和端口空间,始终位于同一位置并共同调度,并在同一节点上的共享上下文中运行。
3.对外提供服务(services)
尽管每个Pod都具有唯一的IP地址,但如果没有服务,这些IP不会在群集外部公开。服务允许您的应用程序接收流量。通过type
在ServiceSpec中指定a ,可以以不同方式公开服务
- ClusterIP(默认) - 在群集中的内部IP上公开服务。此类型使服务只能从群集中访问。
- NodePort - 使用NAT在集群中每个选定节点的同一端口上公开服务。使用可从群集外部访问服务
<NodeIP>:<NodePort>
。ClusterIP的超集。 - LoadBalancer - 在当前云中创建外部负载均衡器(如果支持),并为服务分配固定的外部IP。NodePort的超级用户。
- ExternalName -
externalName
通过返回带有名称的CNAME记录,使用任意名称(在规范中指定)公开服务。没有使用代理。此类型需要v1.7或更高版本kube-dns
。
获取pods信息
kubectl get pods
获取services信息
kubectl get services
使用expose命令对外暴露deployments
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
再次获取services信息,你就可以看到你的services了。
4.扩展应用(同一个服务添加副本数)
当流量增加时,我们需要扩展应用程序以满足用户需求。
使用scale命令
kubectl scale deployments/kubernetes-bootcamp --replicas=4
再次查看deploymnets,你会发现副本数变成了4个。表示成功了。
kubectl get deployments
5.更新应用(还可以做回滚)
用户希望应用程序始终可用,开发人员应该每天多次部署新版本的应用程序。在Kubernetes中,这是通过滚动更新完成的。滚动更新允许通过使用新的实例逐步更新Pods实例来实现部署的更新,而无需停机。新的Pod将在具有可用资源的节点上进行调度。
滚动更新允许以下操作:
- 将应用程序从一个环境推广到另一个环境(通过容器映像更新)
- 回滚到以前的版本
- 持续集成和持续交付应用程序,无需停机
通过设置不同的docker image镜像版本实现
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
线上代码有问题,快速回滚:
kubectl rollout status deployments/kubernetes-bootcamp
查看历史版本:
kubectl rollout history deployment/nginx-deployment
以上内容仅限于命令行的方式,供你了解一些k8s的基础命令。下一章节,我将介绍使用配置的方式,如何将线上服务部署到k8s中,并对外提供服务,自动更新回滚代码等。