yum install -y yum-utils device-mapper-persistent-data lvm2
github搜索compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-uname -s
-uname -m
-o /usr/local/bin/docker-compose
查看:docker-compose --version
github搜索harbor
https://storage.googleapis.com/harbor-releases/release-1.8.0/harbor-offline-installer-v1.8.2-rc1.tgz
解压:tar zxf harbor-offline-installer-v1.7.4.tgz -C /usr/local/
cd /usr/local/harbor/
vim harbor.cfg
hostname = reg.mydomain.com hostname = 192.168.52.10
运行安装脚本
/usr/local/harbor/install.sh
在浏览器上登录harbor:192…168.52.10
用户名:admin 密码:Harbor12345
在harbor新建项目:
修改docker配置文件:
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.52.10
重启服务:
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
因重启后会导致harbor容器停掉,执行命令(在harbor目录下执行,不然会报错):
docker-compose stop
docker-compose start
将docker登录到hardor:
docker login -u admin -p Harbor12345 192.168.52.10
测试:
改名格式:docker tag 192.168.52.10/bdqn/nginx:v1.0 192.168.52.10/bdqn/nginx:v1.0
上传:docker push 192.168.52.10/bdqn/nginx:v1.0
其他节点修改docker配置文件
修改完重启
使用用户名密码登录harbor(不登录不能使用)
测试:docker pull 192.168.52.10/bdqn/nginx:v1.0
k8s数据管理:
k8s支持的数据持久化方案:emptyDir、hostPath、NFS、云存储等。
emptyDir:
编写yaml文件
[root@master ~]# cat emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: producer-consumer
spec:
containers:
- image: busybox
name: prodicer
volumeMounts: #数据挂载项- mountPath: /producer_dir #容器内部路径(自定义)
name: shared-volume #挂载类型(会把容器路径挂载到这里)
args: #在容器内部运行的命令 - /bin/sh
- -c
- echo ‘hello world’ > /producer_dir/hello ; sleep 30000
- mountPath: /producer_dir #容器内部路径(自定义)
- image: busybox
name: consumer
volumeMounts:- mountPath: /consumer_dir
name: shared-volume
args: - /bin/sh
- -c
- cat /consumer_dir/hello ; sleep 30000
- mountPath: /consumer_dir
volumes:
- name: shared-volume #为空目录起的名字
emptyDir: {} #空目录,dockerhost上没有固定的目录
emptyDir volume对于容器来说的持久的,对于pod则不是。当pod从节点删除时,volume的内容也会被删除。但如果只是容器被销毁而pod还在,则volume不受影响。也就是说:emptyDir volume的生命周期与pod一致。
hostPath:
host Path Volume的作用是将Dockerhost文件系统中已经存在的目录Mount给pod容器。但大部分应用也不会使用hostPath volume,因为这实际上增加了pod与节点的耦合,限制了pod的使用。
不过那些需要访问k8s集群或者docker内部数据的应用则需要使用hostPath。
附件:emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: producer-consumer
spec:
containers:
- image: busybox
name: prodicer
volumeMounts:
- mountPath: /producer_dir
name: shared-volume
args:
- /bin/sh
- -c
- echo 'hello world' > /producer_dir/hello ; sleep 30000
- image: busybox
name: consumer
volumeMounts:
- mountPath: /consumer_dir
name: shared-volume
args:
- /bin/sh
- -c
- cat /consumer_dir/hello ; sleep 30000
volumes:
- name: shared-volume
emptyDir: {}