Kubernetes(三)—— Learn kubernetes basics

kubernetes

kubernetes是一个开源的容器管理平台,帮助我们更方便进行容器应用的部署和维护。

1、创建一个集群cluster

image.png

集群包含两种资源:

  • Master:负责管理集群,只有一个

  • Nodes:节点是运行容器服务的机器,可以有多个,可以是虚拟机或者物理机

节点与master之间通过k8s API进行通信。

2、部署应用deploy

image.png
  • Deployment

负责创建和更新容器应用实例,创建时需要声明用哪个镜像、副本数量

  • Deployment Controller

负责监控实例状态,提供了一种自我恢复机制,如果有节点down或者被删除了,会自动启另一个节点来替代。

  • kubectl

kubectl是k8s集群的命令行工具,通过API与集群通信。

常用命令:


#查看版本

kubectl version

#查看nodes

kubectl get nodes

# 创建deployment

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

#查看deployments

kubectl get deployments

3、探索应用

Pod

image.png

pod是容器实例运行的地方,一个pod可以承载单个或多个容器实例,它们将共享存储(数据卷)、网络(集群内部IP)等资源。

一个pod中的多个容器通常是需要协同工作的,它们将共用一个IP。

pod是k8s集群的最小单元

pod运行在node上,一个node可运行一个或多个pod

Nodes

image.png

一个node可以是虚拟机或物理机,每个node正常运行都需要2个部分:

  • kubelet:一个进程,负责node和master通信,并负责管理该node上的pods与containers

  • a container runtime:负责拉取镜像、解包容器、运行容器实例,e.g.docker

  • kubectl get - list resources

  • kubectl describe - show detailed information about a resource

  • kubectl logs - print the logs from a container in a pod

  • kubectl exec - execute a command on a container in a pod


`kubectl get pods`

`kubectl describe pods`

`kubectl logs $pod_name`

4、对外服务service

Service

pod是有生命周期的,node不在的话,上面的pods跟着消亡。虽然ReplicaSet会驱使集群动态的创建新的pods以满足预期的状态,但新pods的IP是会改变的(即使在同一个node上),这无法保证服务的持续可用性。为了解决这一问题,出现了service的概念。

image.png

service使用yaml/json格式定义一组逻辑上的pods集合,并向外部暴露服务,这些pods通常被​LabelSelector指定

type

service有几种类型,需要在ServiceSpec指定​type​:

  • ClusterIP(default):暴露集群内部IP,这样的service只在集群内部可访问

  • NodePort:暴露node节点本身的IP和端口,集群外部可通过​:​访问service

  • NodeBalancer:对外部负载均衡,该service拥有固定的外部IP端口

  • ExternalName:通过任意外部名称(spec中​externalName​定义)暴露服务,要求v1.7及以上版本的​kube-dns​

labels

标签是为了方便标识、识别对象,它们是关联到对象的键值对组合,可以在对象创建时就指定,也可以后面随时添加、更改。

image.png
kubectl get pods

kubectl get services

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

kubectl describe services/kubernetes-bootcamp

# using labels

kubectl describe deployment

kubectl get pods -l run=kubernetes-bootcamp

kubectl get services -l run=kubernetes-bootcamp

kubectl label pod $POD_NAME app=v1

kubectl get pods -l app=v1

kubectl delete service -l run=kubernetes-bootcamp

5、扩容scale

扩容通过改变Deployment中的replicas副本数实现。


image.png
$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           36s
$ kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.extensions/kubernetes-bootcamp scaled
$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   4/4     4            4           70s

6、更新应用update

Rolling update:通过增量的以新pods实例替换老pods的方式,实现“零停机”发布。
k8s中的发布都是有版本控制的,Deployment可以回退到之前的稳定版本。


image.png
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
kubectl rollout status deployments/kubernetes-bootcamp

你可能感兴趣的:(Kubernetes(三)—— Learn kubernetes basics)