kubernetes教程(基础篇)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011510825/article/details/83008663

参考官网: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中,并对外提供服务,自动更新回滚代码等。

猜你喜欢

转载自blog.csdn.net/u011510825/article/details/83008663