Explicação detalhada do método de gerenciamento de recursos k8s (declarativo, declarativo)

Índice

1: Método declarativo de gerenciamento de recursos

2: Veja informações básicas

1. Ver informações

2. Crie

 3. Excluir

4. Tipo de serviço

Três: Exemplos de projetos

1. Crie o comando de criação kubectl

2. Emita o comando kubectl expor

 3. Opere no nó do nó e verifique a porta de balanceamento de carga

 4. Atualize o conjunto kubectl

5. Reverter a implementação do kubectl 

6. Excluir kubectl excluir

Quatro: Método de gestão declarativa

Resumir


1: Método declarativo de gerenciamento de recursos

1. A única entrada para recursos de cluster de gerenciamento de cluster kubernetes é chamar a interface apiserver através do método correspondente
2. kubectl é a ferramenta oficial de linha de comando CLI, usada para se comunicar com o apiserver, organizar e converter os comandos inseridos pelo usuário no linha de comando em As informações que o apiserver pode reconhecer são uma maneira eficaz de gerenciar vários recursos k8s.
3. lista de comandos kubectl
kubectl --help
k8s Documentação chinesa: http://docs.kubernetes.org.cn/683.html
4. Certo É mais conveniente adicionar, excluir e verificar recursos, mas não é fácil modificá-los.

//查看版本信息    kubectl version

//查看资源对象简写    kubectl api-resources

//查看集群信息    kubectl cluster-info

//配置kubectl自动补全    source <(kubectl completion bash)

 

//node节点查看日志     journalctl -u kubelet -f

 

2: Veja informações básicas

kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
--all-namespaces 或 -A :表示显示所有命名空间,
--show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app=nginx :仅显示包含app标签,且值为nginx的资源

1. Ver informações

//查看 master 节点状态
kubectl get componentstatuses
kubectl get cs

//查看命名空间
kubectl get namespace
kubectl get ns
//命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的

//查看default命名空间的所有资源
kubectl get all [-n default]

//查看命名空间kube-public 中的pod 信息
kubectl get pods -n kube-public
NAME                       READY   STATUS    RESTARTS   AGE
nginx-a1-d47f99cb6-hv6gz   1/1     Running   0          24m

//kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录
kubectl exec -it nginx-a1-d47f99cb6-hv6gz bash -n kube-public

2. Crie

//创建命名空间app
kubectl create ns app
kubectl get ns

//在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl)
kubectl create deployment nginx-wl --image=nginx  -n kube-public


//扩缩容
kubectl scale deployment nginx-wl --replicas=2 -n kube-public	# 扩容
kubectl scale deployment nginx-wl --replicas=1 -n kube-public	# 缩容

 3. Excluir

//删除命名空间app
kubectl delete namespace app
kubectl get ns	

//删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来
kubectl delete pod nginx-wl-d47f99cb6-hv6gz -n kube-public

//若pod无法删除,总是处于terminate状态,则要强行删除pod
kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod
		
//删除副本控制器
kubectl delete deployment nginx-a1 -n kube-public
kubectl delete deployment/nginx-a1 -n kube-public

4. Tipo de serviço

●ClusterIP : fornece um IP virtual dentro do cluster para acesso ao pod (tipo de serviço padrão)

●NodePort : abre uma porta em cada nó para acesso externo. O Kubernetes abrirá uma porta em cada nó e a porta de cada nó é a mesma. Programas fora do cluster Kubernetes podem usar NodeIp:NodePort. Serviço de acesso.
Cada porta pode ser apenas um serviço e o intervalo de portas pode ser apenas 30000-32767.

●LoadBalancer : Mapeie o LoadBalancer para o endereço do LoadBalancer fornecido pelo provedor de serviços de nuvem, configurando-o. Este uso é utilizado apenas em cenários em que o Serviço é configurado na plataforma de nuvem de um provedor de serviços de nuvem pública. Acessado por meio de um balanceador de carga externo, geralmente a implantação do LoadBalancer em uma plataforma de nuvem requer custos adicionais.
Depois que o serviço for enviado, o Kubernetes chamará o CloudProvider para criar um serviço de balanceamento de carga para você na nuvem pública e configurar o endereço IP do pod com proxy para o serviço de balanceamento de carga como back-end.

●externalName : mapeia o nome do serviço para um nome de domínio DNS, que é equivalente ao registro CNAME do serviço DNS. É usado para permitir que o pod acesse recursos fora do cluster. Ele não vincula nenhum recurso em si.

targetPort é a porta mapeada do contêiner dentro do cluster. O cliente encaminha o targetPort por meio de clusterIP:port e depois o encaminha para dentro do contêiner; quando acessado por um cliente externo, ele encaminha para o targetPort por meio de nodeIP:nodePort e depois o encaminha para o interior do recipiente.

containerPort é a porta dentro do contêiner e também é kubectl create deploy --port (porta clusterip) --target-port (porta do contêiner) --name <nome do recurso personalizado> --type (tipo de recurso svc)

Três: Exemplos de projetos

Ciclo de vida do projeto: Criar -> Publicar -> Atualizar -> Reverter -> Excluir

1. Crie o comando de criação kubectl

●创建并运行一个或多个容器镜像。
●创建一个deployment 或job 来管理容器。
kubectl create --help

//启动 nginx 实例,暴露容器端口 80,设置副本数 3
kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3
 
kubectl get pods
kubectl get all

2. Emita o comando kubectl expor

●将资源暴露为新的 Service。
kubectl expose --help

//为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort
kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

------------------------------------------------------------------------------------------
Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。
Service 通过 Label Selector 实现的对一组的 Pod 的访问。
对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式访问 Service,再由 Service 重定向到相应的 Pod。

//查看pod网络状态详细信息和 Service暴露的端口
kubectl get pods,svc -o wide

/查看关联后端的节点
kubectl get endpoints

//查看 service 的描述信息
kubectl describe svc nginx

 3. Opere no nó do nó e verifique a porta de balanceamento de carga


//在 node01 节点上操作,查看负载均衡端口
yum install ipvsadm -y
ipvsadm -Ln
//外部访问的IP和端口
TCP  192.168.80.11:44847 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0     
//pod集群组内部访问的IP和端口
TCP  10.0.0.189:80 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0         
  
//在 node02 节点上操作,同样方式查看负载均衡端口
yum install ipvsadm -y
ipvsadm -Ln
TCP  192.168.80.12:44847 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0         
 
TCP  10.0.0.189:80 rr
  -> 172.17.26.3:80               Masq    1      0          0         
  -> 172.17.36.2:80               Masq    1      0          0         
  -> 172.17.36.3:80               Masq    1      0          0         

curl 10.0.0.189
curl 192.168.80.11:44847
//在master01操作 查看访问日志
kubectl logs nginx-cdb6b5b95-fjm2x
kubectl logs nginx-cdb6b5b95-g28wz
kubectl logs nginx-cdb6b5b95-x4m24

 

 4. Atualize o conjunto kubectl

●更改现有应用资源一些信息。
kubectl set --help

//获取修改模板
kubectl set image --help
Examples:
  # Set a deployment's nginx container image to 'nginx:1.9.1', and its busybox container image to 'busybox'.
  kubectl set image deployment/nginx busybox=busybox nginx=nginx:1.9.1

//查看当前 nginx 的版本号
curl -I http://192.168.80.11:44847
curl -I http://192.168.80.12:44847

//将nginx 版本更新为 1.15 版本
kubectl set image deployment/nginx nginx=nginx:1.15

//处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推
kubectl get pods -w

---------------------------------------------------------------------------------------------
#滚动更新详解:
kubectl get all
DESIRED:表示期望的状态是 10 个 READY 的副本
CURRENT:表示当前副本的总数: 即8 个日副本 + 5 个新副本
UP_TO-DATE:表示当前已经完成更新的副本数: 即 5个新副本
AVAILABLE:表示当前处于 READY 状态的副本数: 即8个日副本。

kubectl describe deployment/nginx
滚动更新通过参数 maxSurge 和 maxUnavailable 来控制副本替换的数量
maxSurge:此参数控制滚动更新过程中副本总数的超过 DESIRED 的上限。maxSurge 可以是具体的整数(比如 3),也可以是百分百,向上取整。maxSurge 默认值为 25%。
例如,DESIRED 为 10,那么副本总数的最大值为 10 + 10 * 25% = 13,即 CURRENT 为 13。

maxUnavailable:此参数控制滚动更新过程中,不可用的副本相占 DESIRED 的最大比例。maxUnavailable 可以是具体的整数(比如 3),也可以是百分百,向下取整。 maxUnavailable 默认值为 25%。
例如,DESIRED 为 10,那么可用的副本数至少要为 10 - 10 * 25% = 8,即 AVAILABLE 为 8。

因此 maxSurge 值越大,初始创建的新副本数量就越多;maxUnavailable 值越大,初始销毁的旧副本数量就越多。

理想情况下,DESIRED 为 10 的滚动更新的过程应该是这样的:
首先创建 3 个新副本使副本总数达到 13 个。
然后销毁 2 个旧副本使可用的副本数降到 8 个。
当这 2 个旧副本成功销毁后,可再创建 2 个新副本,使副本总数保持为 13 个。
当新副本通过 Readiness 探测后,会使可用副本数增加,超过 8。
进而可以继续销毁更多的旧副本,使可用副本数回到 8。
旧副本的销毁使副本总数低于 13,这样就允许创建更多的新副本。
这个过程会持续进行,最终所有的旧副本都会被新副本替换,滚动更新完成。
---------------------------------------------------------------------------------------------

//再看更新好后的 Pod 的 ip 会改变
kubectl get pods -o wide

//再看 nginx 的版本号
curl -I http://192.168.80.11:44847
curl -I http://192.168.80.12:44847

5. Reverter a implementação do kubectl 

●对资源进行回滚管理
kubectl rollout --help

//查看历史版本
kubectl rollout history deployment/nginx 

//执行回滚到上一个版本
kubectl rollout undo deployment/nginx

//执行回滚到指定版本
kubectl rollout undo deployment/nginx --to-revision=1

//检查回滚状态
kubectl rollout status deployment/nginx

6. Excluir kubectl excluir

//删除副本控制器
kubectl delete deployment/nginx

//删除service
kubectl delete svc/nginx-service

kubectl get all

Quatro: Método de gestão declarativa

1. Adequado para modificar recursos
2. O método declarativo de gerenciamento de recursos depende do arquivo de manifesto de configuração de recursos para gerenciar recursos. O
arquivo de manifesto de configuração de recursos tem dois formatos: yaml (amigável, fácil de ler), json (fácil de analisar a interface API))
3. O gerenciamento de recursos é definido antecipadamente em uma lista unificada de configuração de recursos e, em seguida, aplicado ao cluster k8s por meio de comandos declarativos. 4.
Formato gramatical: kubectl create/apply/delete -f xxxx.yaml
 

//查看资源配置清单
kubectl get deployment nginx -o yaml

//解释资源配置清单
kubectl explain deployment.metadata

kubectl get service nginx -o yaml
kubectl explain service.metadata

//修改资源配置清单并应用
方法一:离线修改:
修改yaml文件,并用 kubectl apply -f xxxx.yaml 文件使之生效
注意:当apply不生效时,先使用delete清除资源,再apply创建资源

kubectl get service nginx -o yaml > nginx-svc.yaml
vim nginx-svc.yaml				#修改port: 8080
kubectl delete -f nginx-svc.yaml
kubectl apply -f nginx-svc.yaml
kubectl get svc

方法二:在线修改:
直接使用 kubectl edit service nginx 在线编辑资源配置清单并保存退出即时生效(如port: 888)
PS:此修改方式不会对yaml文件内容修改


//删除资源配置清单
陈述式删除:
kubectl delete service nginx

声明式删除:
kubectl delete -f nginx-svc.yaml


 

 

 

Resumir

Gerenciamento declarativo de recursos
kubectl create <tipo de recurso> <nome do recurso> -n namespace [opções]
                                                  --image=mirror --replicas=número de réplicas --port=porta do contêiner

kubectl get <tipo de recurso|all> [nome do recurso] -n namespace -o wide|yaml|json -w

kubectl descreve <tipo de recurso> <nome do recurso> -n namespace

kubectl delete <tipo de recurso> <nome do recurso>|--all -n namespace [--force --grace-period=0]
                                                           Encerre a execução do pod imediatamente e exclua recursos à força

kubectl exec -it -n namespace <Nome do recurso do pod> [-c nome do contêiner] sh|bash

kubectl logs -n namespace <Nome do recurso do pod> [-c nome do contêiner] [-p]

kubectl scale -n implantação de namespace <nome do recurso> --replicas=número de réplicas   

kubectl expor -n implantação de namespace <nome do recurso> --name <nome do recurso svc personalizado> --port <porta IP do cluster> --target-port <porta do contêiner> --type <tipo svc> kubectl create svc <tipo de recurso svc
> <nome do recurso> --tcp=<porta clusterIP>:<porta do contêiner>

kubectl definir implantação de imagem <nome do recurso> <nome do contêiner>=<nome da imagem>

implantação do histórico de implementação do kubectl <nome do recurso>
implementação do kubectl desfazer implantação <nome do recurso> [--to-revision= ]
implantação do status de implementação do kubectl <nome do recurso>


Existem 4 tipos de serviço:
ClusterIP: O tipo de recurso de serviço padrão, que fornece clusterIP para acesso interno ao cluster K8S.
NodePort: Uma porta será aberta em cada nó do Node. Usuários dentro e fora do cluster K8S podem acessar o serviço através NodeIP: NodePort. E seu Pod
LoadBalancer associado: use o serviço e serviço LB da nuvem pública para mapeamento. Os usuários podem usar o endereço IP do serviço LB da nuvem pública para encaminhar a solicitação para o nó Node e, em seguida, acessar o serviço e seus associados Pod ExternalName por meio de NodeIP:NodePort
. : Equivalente a criar um alias para um nome de domínio ou IP. O pod pode acessar serviços externos relacionados por meio deste serviço.


A porta do serviço:
port: A porta usada pelo clusterIP do recurso de serviço
nodePort: A porta aberta em cada nó Node (a faixa padrão é 30000~32767) definida no serviço do tipo NodePort. targetPort: O serviço será
enviado para a porta ou A solicitação nodePort é encaminhada para a porta do contêiner do pod de back-end.

containerPort: a porta do contêiner especificada ao criar o pod

Dentro do cluster K8S http://clusterIP:port --> podIP:containerPort
Fora do cluster K8S http://nodeIP:nodePort --> podIP:containerPort


Estratégia de lançamento de aplicativo:
lançamento azul esverdeado,
lançamento contínuo
, lançamento em escala de cinza/lançamento canário
kubectl set image implantação <nome do recurso> <nome do contêiner>=<nome da imagem> && implantação da pausa do lançamento do kubectl <nome do recurso>
implantação do currículo do lançamento do kubectl <nome do recurso >

Máximo de 25% indisponível Durante o processo de atualização contínua, o número de pods destruídos não excede 25% do número esperado de cópias, arredondado para baixo
Aumento máximo de 25% Durante o processo de atualização contínua, o número de novos pods não excede 25% de o número esperado de cópias, arredondado para cima Arredondamento

O número esperado de cópias do Pod é 10, o número de cópias destruídas é 2 e o número de novos Pods é 3. O número de Pods permanecerá consistente entre 8 e 13 durante todo o processo de atualização.

Gerenciamento declarativo de recursos
kubectl apply|create -f XXX.yaml
kubectl delete -f XXX.yaml

kubectl edit <tipo de recurso> <nome do recurso>

kubectl explica <tipo de recurso>.<campo de primeiro nível>.<campo de segundo nível>...
 

Acho que você gosta

Origin blog.csdn.net/A1100886/article/details/132152232
Recomendado
Clasificación