[Cloud native | Apprenez Kubernetes à partir de zéro] Vingt et un, stockage persistant kubernetes

Cet article a été inclus dans la rubrique " Learn k8s from scratch "
Article précédent : Explication détaillée des composants kube-proxy du proxy de service Cliquez sauter

insérez la description de l'image ici

Complément à l'article précédent

Découverte de service de service : explication détaillée des composants coredns

Qu'est-ce que le DNS ?

Le nom complet du DNS est Domain Name System (Domain Name System), qui est l'annuaire téléphonique de tout Internet. Il peut traduire des noms de domaine compréhensibles en adresses IP compréhensibles par des machines, afin que les internautes ne puissent plus besoin de contacter directement difficile à lire et comprendre l'adresse IP. Le système de nom de domaine est très important dans l'Internet actuel, car l'adresse IP du serveur peut changer fréquemment. S'il n'y a pas de DNS, une fois que l'adresse IP change, le client du serveur actuel ne peut pas se connecter au serveur cible. Si Nous fournissons un "alias" pour l'adresse IP et modifions la relation entre l'alias et l'adresse IP lorsqu'elle change, puis nous pouvons nous assurer que les services fournis par le cluster sont accessibles par d'autres clients de manière relativement stable. Le DNS est en fait un système de nommage distribué en forme d'arborescence, c'est comme une base de données distribuée décentralisée qui stocke le mappage des noms de domaine aux adresses IP.

CoreDNS?

CoreDNS est en fait un service DNS, et DNS est une méthode de découverte de service courante, de sorte que de nombreux projets et ingénieurs open source utilisent CoreDNS pour fournir la découverte de service pour les clusters, et Kubernetes utilise CoreDNS pour résoudre les problèmes de découverte de service dans les clusters. En tant que service CNCF (Cloud Native Computing Foundation), la mise en place de CoreDNS est très simple.

验证 coredns 
#把 dig.tar.gz 上传到 xianchaonode2 和 xianchaonode1 机器上,手动解压: 
[root@k8snode2 ~]# docker load -i dig.tar.gz 
[root@k8snode1 ~]# docker load -i dig.tar.gz 
[root@xianchaomaster1 ~]# vim dig.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: dig
  namespace: default
spec:
  containers:
  - name: dig
    image: xianchao/dig:latest
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always
#更新资源清单文件 
[root@k8smaster node]# kubectl apply -f dig.yaml 
pod/dig created

#查看默认名称空间的 kubernetes 服务 
[root@k8smaster node]# kubectl get svc | grep kubernetes 
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        16d
#解析 dns,如有以下返回说明 dns 安装成功 
[root@k8smaster node]# kubectl exec -it dig -- nslookup kubernetes 
Server:		10.96.0.10
Address:	10.96.0.10#53

Name:	kubernetes.default.svc.cluster.local
Address: 10.96.0.1
 
kubernetes.default.svc.cluster.local 
服务名.名称空间.默认后缀 不屑也会搜索到,因为默认/etc/resolv里面dns服务中会搜索default svc cluster.local这些后缀

在 k8s 中创建 service 之后,service 默认的 FQDN 是<service name>.<namespace>.svc.cluster.local,那么 k8s 集群内部的服务就可以通过 FQDN 访问

Stockage persistant Kubernetes

Compréhension rapide

Nous avons déjà mentionné le volume de données : emptydir, il s'agit d'un stockage local, si le pod redémarre, les données n'existent pas et les données doivent être stockées de manière persistante

Pour le stockage persistant des données [redémarrage du pod, les données existent toujours], il existe deux façons

  • nfs : stockage réseau [stocké via un serveur]

Explication détaillée du stockage persistant k8s

Pourquoi avez-vous besoin d'un stockage persistant dans k8s ?

Les applications déployées dans les k8 fonctionnent sous la forme de conteneurs de pods. Si nous déployons des bases de données telles que MySQL et Redis, nous devons sauvegarder les données générées par ces bases de données. Étant donné qu'un pod a un cycle de vie, si le pod ne monte pas le volume de données, les données disparaîtront après la suppression ou le redémarrage du pod. Si vous souhaitez conserver les données pendant une longue période, vous devez utiliser les données persistantes du pod. stockage.

stockage persistant k8s : emptyDir

#查看 k8s 支持哪些存储 
[root@k8smaster node]# kubectl explain pods.spec.volumes 
KIND:     Pod
VERSION:  v1

RESOURCE: volumes <[]Object>

DESCRIPTION:
     List of volumes that can be mounted by containers belonging to the pod.
     More info: https://kubernetes.io/docs/concepts/storage/volumes

     Volume represents a named volume in a pod that may be accessed by any
     container in the pod.
FIELDS: 
 awsElasticBlockStore <Object> 
 azureDisk <Object> 
 azureFile <Object> 
 cephfs <Object> 
 cinder <Object> 
 configMap <Object> 
 csi <Object> 
 downwardAPI <Object> 
 emptyDir <Object> 
 ephemeral <Object> 
 fc <Object> 
 flexVolume <Object> 
 flocker <Object> 
 gcePersistentDisk <Object> 
 gitRepo <Object> 
 glusterfs <Object> 
 hostPath <Object> 
 iscsi <Object> 
 name <string> -required- 
 nfs <Object> 
 persistentVolumeClaim <Object> 
 photonPersistentDisk <Object> 
 portworxVolume <Object> 
 projected <Object> 
 quobyte <Object> 
 rbd <Object> 
 scaleIO <Object> 
 secret <Object> 
 storageos <Object> 
 vsphereVolume <Object>
常用的如下: 
emptyDir 
hostPath 
nfs 
persistentVolumeClaim 
glusterfs 
cephfs 
configMap 
secret 
 
我们想要使用存储卷,需要经历如下步骤 
1、定义 pod 的 volume,这个 volume 指明它要关联到哪个存储上的 
2、在容器中要使用 volumemounts 挂载对应的存储 
 
经过以上两步才能正确的使用存储卷 
 
emptyDir 类型的 Volume 是在 Pod 分配到 Node 上时被创建,Kubernetes 会在 Node 上自动分配一个目录,因此无需指定宿主机 Node 上对应的目录文件。这个目录的初始内容为空,当 Pod 从 Node 上移除时,emptyDir中的数据会被永久删除。emptyDir Volume主要用于某些应用程序无需永久保存的临时目录,多个容器的共享目录等。 
 
#创建一个 pod,挂载临时目录 emptyDir 
 
Emptydir 的官方网址: https://kubernetes.io/docs/concepts/storage/volumes#emptydir 

[root@k8smaster ~]# mkdir cjh
[root@k8smaster ~]# cd cjh
[root@k8smaster cjh]# vim emptydir.yaml 
apiVersion: v1
kind: Pod 
metadata: 
  name: pod-empty
spec: 
  containers:
  - name: container-empty
    image: nginx
    imagePullPolicy: IfNotPresent
    volumeMounts: 
    - mountPath: /cache			#把cache-volume这个挂载到容器里的根cache目录下
      name: cache-volume
  volumes:
  - emptyDir:
     {
    
    }
    name: cache-volume
#- emptyDir: {} 也可以这么写 表示是临时的
#更新资源清单文件 
[root@k8smaster cjh]# kubectl apply -f emptydir.yaml 
pod/pod-empty created 
 
查看本机临时目录存在的位置
#查看 pod 调度到哪个节点 
[root@k8smaster cjh]# kubectl get pods -o wide | grep empty 
pod-empty               1/1     Running   0          1s    10.244.2.7   k8snode    <none>           <none>

#查看 pod 的 uid 
[root@k8smaster cjh]# kubectl get pods pod-empty -o yaml | grep uid 		#pod以yaml文件格式输出找到uid
  uid: c2b30d56-73b2-4d8d-9011-c39abd51b065
 
#登录到 xianchaonode1 上 
[root@k8snode ~]# tree /var/lib/kubelet/pods/c2b30d56-73b2-4d8d-9011-c39abd51b065
/var/lib/kubelet/pods/c2b30d56-73b2-4d8d-9011-c39abd51b065
├── containers
│   └── container-empty
│       └── 20e34c53
├── etc-hosts
├── plugins
│   └── kubernetes.io~empty-dir
│       ├── cache-volume
│       │   └── ready
│       └── wrapped_default-token-788ff
│           └── ready
└── volumes
    ├── kubernetes.io~empty-dir
    │   └── cache-volume
    └── kubernetes.io~secret
        └── default-token-788ff
            ├── ca.crt -> ..data/ca.crt
            ├── namespace -> ..data/namespace
            └── token -> ..data/token

11 directories, 7 files
 
由上可知,临时目录在本地的
/var/lib/kubelet/pods/c2b30d56-73b2-4d8d-9011-c39abd51b065/volumes/kubernetes.io~empty-dir/cache-volume/

#测试
[root@k8smaster cjh]# kubectl exec -it pod-empty -- /bin/sh
# cd cache  
# ls
[root@k8snode cache-volume]# echo "wowowowowow" > test.txt
# ls
test.txt
[root@k8smaster cjh]# kubectl delete pods pod-empty
pod "pod-empty" deleted

Il existe trois types de stockage persistant, nous vous expliquerons en détail dans le prochain article !

écrire à la fin

Ce n'est pas facile à créer, si vous pensez que le contenu vous est utile, merci de me donner un suivi à trois liens pour me soutenir ! S'il y a des erreurs, merci de les signaler dans les commentaires et je les corrigerai en temps voulu !
La série en cours de mise à jour : apprenez k8s à partir de zéro.
Merci d'avoir regardé. L'article est mélangé à une compréhension personnelle. S'il y a une erreur, veuillez me contacter et me le signaler ~

Je suppose que tu aimes

Origine blog.csdn.net/qq_45400861/article/details/126903668
conseillé
Classement