1 Introdução ao gerenciamento de recursos
No Kubernetes, todo o conteúdo é abstraído em recursos e os usuários precisam gerenciar o Kubernetes por meio de recursos operacionais.
Kubernetes é essencialmente um sistema de cluster. Os usuários podem implantar vários serviços no cluster. O chamado serviço de implantação, na verdade, significa executar contêineres um por um no cluster Kubernetes e executar programas específicos nos contêineres.
A menor unidade de gerenciamento do kubernetes é pod em vez de contêiner, portanto, os contêineres só podem ser colocados em pods. O Kubernetes geralmente não gerencia pods diretamente, mas gerencia pods por meio do controlador de pod.
Depois que o pod puder fornecer serviços, você deverá considerar como acessá-los no pod. O Kubernetes fornece recursos de serviço para implementar essa função.
Claro, se os dados do programa no Pod precisarem ser persistidos, o Kubernetes também fornece vários sistemas de armazenamento.
O núcleo do aprendizado do kubernetes é aprender como operar vários recursos, como pods, controladores de pod, serviços e armazenamento no cluster.
2 Introdução à linguagem YAML
YAML é uma linguagem de marcação semelhante a XML e JSON. Ele enfatiza ser centrado nos dados e não focar na linguagem de marcação. Portanto, a definição de YAML em si é relativamente simples e é conhecida como “uma linguagem de formato de dados humanizada”.
<heima>
<age>15</age>
<address>Beijing</address>
</heima>
heima:
age: 15
address: Beijing
A sintaxe do YAML é relativamente simples, incluindo principalmente o seguinte:
- Maiúsculas e minúsculas
- Use recuo para indicar relacionamentos hierárquicos
- Tabulações não são permitidas para recuo, apenas espaços são permitidos (restrições de versão inferior)
- O número de espaços para recuo não importa, desde que os elementos do mesmo nível estejam alinhados à esquerda
- '#' indica comentário
YAML oferece suporte aos seguintes tipos de dados:
- escalar: um valor único e indivisível
- Objeto: uma coleção de pares chave-valor, também conhecido como mapeamento/hash/dicionário
- Matriz: Um conjunto de valores organizados em ordem, também chamado de sequência/lista
# Escalar, refere-se a um valor simples, string, valor booleano, inteiro, número de ponto flutuante, Nulo, hora, data # 1
Tipo booleano
c1: verdadeiro (ou Verdadeiro)
# 2 Tipo inteiro
c2: 234
# 3 Tipo de ponto flutuante
c3: 3.14
# 4 tipo nulo
c4: ~ # Use ~ para representar nulo
# 5 Tipo de data
c5: 17/02/2018 # A data deve usar o formato ISO 8601, ou seja, aaaa-MM-dd
# 6 Tipo de hora
c6: 2018- 02 -17T15:02:31+08:00 # A hora usa o formato ISO 8601, a hora e a data são conectadas usando T e, finalmente, + é usado para representar o fuso horário # 7 String tipo c7: heima # Método de
escrita
simples , escreva o valor diretamente, se a string Existem caracteres especiais no meio, que devem ser colocados entre aspas duplas ou aspas simples
c8: line1
line2 # Se houver muitas strings, elas podem ser divididas em várias linhas, e cada linha será convertido em um espaço.
#Object
# Formulário 1 (recomendado):
heima:
idade: 15
endereço: Pequim
# Formulário 2 (compreendido):
heima: {idade: 15, endereço: Pequim}
# Array
# Formulário 1 (recomendado):
endereço:
- Shunyi
- Changping
# Formulário 2 (compreendido):
endereço: [Shunyi, Changping]
dica:
1 Lembre-se ao escrever yaml: adicione um espaço depois dele
2 Se você precisar colocar várias partes da configuração yaml em um arquivo, use --- para separá-las.
3 A seguir está um site que converte yaml em json. Você pode usá-lo para verificar se o yaml está escrito corretamente.
https://www.json2yaml.com/convert-yaml-to-json
3 métodos de gerenciamento de recursos
- Gerenciamento imperativo de objetos: use comandos diretamente para operar recursos do Kubernetes
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
- Configuração imperativa de objetos: opere recursos do Kubernetes por meio de configuração de comando e arquivos de configuração
kubectl create/patch -f nginx-pod.yaml
- Configuração declarativa de objetos: opere recursos do Kubernetes por meio de comandos de aplicação e arquivos de configuração
kubectl apply -f nginx-pod.yaml
tipo | Objeto de operação | Ambiente aplicável | vantagem | deficiência |
---|---|---|---|---|
Gerenciamento imperativo de objetos | objeto | teste | Simples | Só pode operar objetos ativos, não pode auditar ou rastrear |
Configuração de objeto imperativa | documento | desenvolver | Pode ser auditado e rastreado | Quando o projeto é grande, existem muitos arquivos de configuração e a operação é complicada. |
Configuração declarativa de objeto | Índice | desenvolver | Operações de diretório de suporte | Difícil de depurar em situações inesperadas |
3.1 Gerenciamento imperativo de objetos
comando kubectl
kubectl é uma ferramenta de linha de comando para clusters kubernetes que pode gerenciar o próprio cluster e instalar e implantar aplicativos em contêineres no cluster. A sintaxe do comando kubectl é a seguinte:
kubectl [command] [type] [name] [flags]
comando: Especifique a operação a ser executada no recurso, como criar, obter, excluir
tipo: Especifique o tipo de recurso, como implantação, pod, serviço
nome: o nome do recurso especificado, o nome diferencia maiúsculas de minúsculas
sinalizadores: Especifique parâmetros opcionais adicionais
# 查看所有pod
kubectl get pod
# 查看某个pod
kubectl get pod pod_name
# 查看某个pod,以yaml格式展示结果
kubectl get pod pod_name -o yaml
Tipo de recurso
Todo o conteúdo do kubernetes é abstraído em recursos, que podem ser visualizados por meio do seguinte comando:
kubectl api-resources
Os recursos usados com frequência incluem o seguinte:
Classificação de recursos | Nome do recurso | abreviação | função de recurso |
---|---|---|---|
Recursos em nível de cluster | nós | não | componentes do cluster |
espaços para nome | ns | Isolar pod | |
recursos de pod | vagens | depois | carregando contêiner |
controlador de recursos de pod | controladores de replicação | RC | Controlar recursos de pod |
conjuntos de réplicas | rs | Controlar recursos de pod | |
implantações | implantar | Controlar recursos de pod | |
conjuntos de daemons | ds | Controlar recursos de pod | |
empregos | Controlar recursos de pod | ||
cronjobs | cj | Controlar recursos de pod | |
horizontalpodautoscalers | hpa | Controlar recursos de pod | |
conjuntos de estado | pontos | Controlar recursos de pod | |
Recursos de descoberta de serviço | Serviços | serviço | Interface externa de pod unificada |
entrada | ing | Interface externa de pod unificada | |
Recursos de armazenamento | anexos de volume | armazenar | |
volumes persistentes | pv | armazenar | |
reivindicações de volume persistente | PVC | armazenar | |
Configurar recursos | mapas de configuração | cm | Configuração |
segredos | Configuração |
Operação
Kubernetes permite uma variedade de operações em recursos. Você pode visualizar comandos de operação detalhados através de --help
kubectl --help
As operações comumente usadas incluem o seguinte:
Classificação de comando | Ordem | traduzir | Função de comando |
---|---|---|---|
comandos básicos | criar | criar | Crie um recurso |
editar | editar | Editar um recurso | |
pegar | Obtivermos | Obtenha um recurso | |
correção | renovar | atualizar um recurso | |
excluir | excluir | Excluir um recurso | |
explicar | explicar | Exibir documentos de recursos | |
Execute e depure | correr | correr | Execute uma imagem especificada no cluster |
expor | expor | Expor recursos como serviço | |
descrever | descrever | Mostrar informações internas do recurso | |
Histórico | registro | Produza os logs do contêiner no pod | |
anexar | barbante | Insira um contêiner em execução | |
executivo | implemento | Execute um comando no contêiner | |
CP | cópia de | Copie arquivos dentro e fora do pod | |
sair da cama | primeira exibição | Gerenciar a liberação de recursos | |
escala | escala | Expandir (diminuir) o número de pods | |
escala automática | auto-ajuste | Ajuste automaticamente o número de pods | |
Comandos avançados | aplicar | RC | Configurar recursos por meio de arquivos |
rótulo | Rótulo | Atualizar tags em recursos | |
Outros comandos | informações do cluster | Informações do cluster | Mostrar informações do cluster |
versão | Versão | Exibir as versões atuais do servidor e do cliente |
A seguir está uma demonstração simples do uso do comando usando a criação e exclusão de um namespace/pod:
# 创建一个namespace
[root@master ~]# kubectl create namespace dev
namespace/dev created
# 获取namespace
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 21h
dev Active 21s
kube-node-lease Active 21h
kube-public Active 21h
kube-system Active 21h
# 在此namespace下创建并运行一个nginx的Pod
[root@master ~]# kubectl run pod --image=nginx:latest -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created
# 查看新创建的pod
[root@master ~]# kubectl get pod -n dev
NAME READY STATUS RESTARTS AGE
pod 1/1 Running 0 21s
# 删除指定的pod
[root@master ~]# kubectl delete pod pod-864f9875b9-pcw7x
pod "pod" deleted
# 删除指定的namespace
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted
3.2 Configuração imperativa de objetos
A configuração de objeto imperativa é usar comandos e arquivos de configuração para operar recursos do Kubernetes.
1) Crie um nginxpod.yaml com o seguinte conteúdo:
apiVersion: v1
kind: Namespace
metadata:
name: dev
---
apiVersion: v1
kind: Pod
metadata:
name: nginxpod
namespace: dev
spec:
containers:
- name: nginx-containers
image: nginx:latest
2) Execute o comando create para criar recursos:
[root@master ~]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
Neste momento, verificou-se que foram criados dois objetos de recurso, nomeadamente namespace e pod.
3) Execute o comando get para visualizar os recursos:
[root@master ~]# kubectl get -f nginxpod.yaml
NAME STATUS AGE
namespace/dev Active 18s
NAME READY STATUS RESTARTS AGE
pod/nginxpod 1/1 Running 0 17s
Isso exibe as informações dos dois objetos de recursos
4)执行delete命令,删除资源:
[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted
此时发现两个资源对象被删除了
总结:
命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml配置文件(里面是命令需要的各种参数)
3.3 声明式对象配置
声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。
# 首先执行一次kubectl apply -f yaml文件,发现创建了资源
[root@master ~]# kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
# 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
[root@master ~]# kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged
总结:
其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)
使用apply操作资源:
如果资源不存在,就创建,相当于 kubectl create
如果资源已存在,就更新,相当于 kubectl patch
扩展:kubectl可以在node节点上运行吗 ?
kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:
scp -r HOME/.kube node1: HOME/
使用推荐: 三种方式应该怎么用 ?
创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml
删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml
查询资源 使用命令式对象管理 kubectl get(describe) 资源名称