如何把kubernetes pod中的文件拷贝到宿主机上或者把宿主机上文件拷贝到kubernetes pod中
1. 创建一个 Kubernetes Pod
首先,下面是一个示例Pod的定义文件(pod.yaml):
cat > nginx.yaml << EOF
apiVersion: v1
kind: Pod
metadata:
name: my-nginx
spec:
containers:
- name: nginx
image: nginx
EOF
kubectl apply -f nginx.yaml
[root@k8s-ke-cloud ~]# cat nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-nginx
spec:
containers:
- name: nginx
image: nginx
[root@k8s-ke-cloud ~]# kubectl apply -f nginx.yaml
pod/my-nginx created
[root@k8s-ke-cloud ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx 1/1 Running 0 69s
[root@k8s-ke-cloud ~]# kubectl exec -it my-nginx -- /bin/bash
root@my-nginx:/# pwd
/
root@my-nginx:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@my-nginx:/# cd tmp/
root@my-nginx:/tmp# ls
root@my-nginx:/tmp# pwd
/tmp
root@my-nginx:/tmp#
在这个定义文件中,我们创建了一个名为nginx的Pod,并在其中定义了一个名为nginx的容器。
2. 将文件复制到 Pod 中
我们需要将文件复制到Pod中。可以使用kubectl cp命令将文件复制到正在运行的Pod中。以下是复制文件到Pod的命令示例:
kubectl cp /root/kingbase.yaml.bak my-nginx:/tmp
#新打开一个窗口
[root@k8s-ke-cloud ~]# pwd
/root
[root@k8s-ke-cloud ~]# ls
kingbase.tar kingbase.yaml kingbase.yaml.bak nginx.yaml
[root@k8s-ke-cloud ~]# kubectl cp /root/kingbase.yaml.bak my-nginx:/tmp
[root@k8s-ke-cloud ~]# kubectl exec -it my-nginx -- /bin/bash
root@my-nginx:/# pwd
/
root@my-nginx:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@my-nginx:/# cd tmp/
root@my-nginx:/tmp# ls
root@my-nginx:/tmp# pwd
/tmp
root@my-nginx:/tmp# ls
kingbase.yaml.bak
root@my-nginx:/tmp#
3. 通过 kubectl 命令将文件从 Pod 复制到宿主机
我们可以使用kubectl cp命令将文件从Pod复制到宿主机。以下是将文件从Pod复制到宿主机的命令示例:
#提前创建好的pod
[root@k8s-ke-cloud ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx 1/1 Running 0 7m34s
[root@k8s-ke-cloud ~]# kubectl exec -it my-nginx -- /bin/bash
root@my-nginx:/# cd /tmp/
root@my-nginx:/tmp# ls
kingbase.yaml.bak
root@my-nginx:/tmp# mv kingbase.yaml.bak kingbase.txt
root@my-nginx:/tmp# ls
kingbase.txt
root@my-nginx:/tmp# pwd
/tmp
root@my-nginx:/tmp#
kubectl cp my-nginx:/tmp/ /root/mqq/
#kubectl cp <pod-name>:<source-path> <local-destination-path>
是Pod的名称;
是要从Pod中复制文件的源路径;
是要将文件复制到的本地计算机上的目标路径。
[root@k8s-ke-cloud mqq]# pwd
/root/mqq
[root@k8s-ke-cloud mqq]# ls
[root@k8s-ke-cloud mqq]# kubectl cp my-nginx:/tmp/ /root/mqq/
tar: Removing leading `/' from member names
[root@k8s-ke-cloud mqq]# ls
kingbase.txt qq.txt
[root@k8s-ke-cloud mqq]#