Brincando com k8s: gerenciamento de recursos

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) 资源名称

Acho que você gosta

Origin blog.csdn.net/duansamve/article/details/131407006
Recomendado
Clasificación