Índice
1: Método declarativo de gerenciamento de recursos
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
Quatro: Método de gestão declarativa
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êinerkubectl 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çakubectl 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 ArredondamentoO 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.yamlkubectl edit <tipo de recurso> <nome do recurso>
kubectl explica <tipo de recurso>.<campo de primeiro nível>.<campo de segundo nível>...