注意:最好是吧harbor装在另外一台不在k8s集群上的机器上,这样安装后k8s不会有问题,因为安装harbor要重启docker,重启docker就相当于重起kube-system起的pod。就会导致k8s奔溃,最后要重装k8s。
使用web-7作为harbor主机
1.先安装docker 和docker-compose
先安装docker版本
yum -y install docker-ce-19.03.15 docker-ce-cli-19.03.15
没有这个安装包,是没有docker下载源
4.安装docker-所有机器都操作
配置阿里源
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
安装指定版本的Docker
yum list docker-ce --showduplicates
yum -y install docker-ce-19.03.15 docker-ce-cli-19.03.15
安装docker-compose
k8s使用harbor
1.安装harbor
yum install docker-compose -y
cd /opt/
tar zxf harbor-offline-installer-v1.9.0-rc1.tgz
cd harbor
修改配置:
vim harbor.yml
[root@master /opt/harbor]# cat harbor.yml |egrep 'hostname|harbor_admin|8888'
hostname: 10.0.0.10
port: 8888
harbor_admin_password: 123
执行安装脚本:
./install.sh
先启动docker
再安装
报错了。重新装一边
还是报错
注意:发现还是安装不成功,web-7恢复到快照状态,并且设置为2G内存,开始时512M内存,查看docker那章安装harbor。
安装成功
访问:
http://10.0.0.10:8888
2.修改docker信任仓库
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": ["https://ig2l319y.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries" : ["http://10.0.0.10:8888"]
}
EOF
systemctl restart docker #高危操作
注意;所有的节点都要这样操作
重启docker完成后,测试一下
在harbor新建一个项目文件夹k8s
先给nginx镜像打一个标签
再上传镜像到harbor上
访问拒绝,因为node1没有登录
登录测试
上传测试
上传之后,镜像大小会压缩存储到harbor上
harbor密码文件会下面的目录
查看所有的./docker/config.json文件
3.将docker-login转码成base64编码
注意,直接解析出来的是三行,需要手动编辑成一行
选择其中任意一个节点都可以,文件的内容都是一样的
[root@master ~]# cat .docker/config.json |base64
ewoJImF1dGhzIjogewoJCSIxMC4wLjAuMTA6ODg4OCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZNVEl6IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy4xNSAobGludXgpIgoJfQp9
4.创建Secret资源,
secret 是密码的意思
创建secret资源配置文件
把他复制出来到nodepad++上
master节点上创建secret目录
把加密的字符修改成一行,使用电脑退格键
复制到下面
cat > harbor-secret.yaml << 'EOF'
apiVersion: v1
kind: Secret
metadata:
name: harbor-secret
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxMC4wLjAuMTA6ODg4OCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZNVEl6IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy4xNSAobGludXgpIgoJfQp9
type: kubernetes.io/dockerconfigjson
EOF
apiVersion: v1
kind: Secret
metadata:
name: harbor-secret
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxMC4wLjAuMTA6ODg4OCI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZNVEl6IgoJCX0sCgkJIjEwLjAuMC43Ojg4ODgiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2TVRJeiIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTkuMDMuMTUgKGxpbnV4KSIKCX0KfQ==
type: kubernetes.io/dockerconfigjson
执行secret资源配置
5.应用并查看
kubectl create -f harbor-secret.yaml
kubectl get secrets
kubectl describe secrets harbor-secret
6.创建带有imagePullSecrets的POD
cat > nginx-pod.yml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
imagePullSecrets:
- name: harbor-secret
containers:
- name: nginx
image: 10.0.0.10:8888/k8s/nginx:1.14.0
imagePullPolicy: IfNotPresent
EOF
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
imagePullSecrets:
- name: harbor-secret
containers:
- name: nginx
image: 10.0.0.7:8888/k8s/nginx:1.14.0
imagePullPolicy: IfNotPresent
先删除deployment创建的pod
再创建一个新的pod
并且查看详细信息
7.创建POD测试
kubectl apply -f nginx-pod.yml
kubectl describe pod nginx-pod
namespace
docker 的namespace
k8s的namespace隔离的是项目,不同命名空间是不能相互通信,有一定的资源隔离
不能直接通信
查看所有的命名空间
kubectl get ns
默认命名空间
kubectl get ns default
查看kube-system名命空间的pod
kubectl -n kube-system get pod
查看kube-system命名空间的svc
kubectl -n kube-system get svc
1.不同命名空间的POD能不能互通?
OK
创建两个不同命名空间的pod
报错了。是因为提前要创建两个命名空间
查看新建的命令空间
kubectl get ns
查看aaa和bbb命令空间的pod
查看aaa命名空间pod的IP
kubectl -n aaa describe pod busybox-aaa
查看bbb命令空间pod的IP
kubectl describe -n bbb pod busybox-bbb
先进入aaa命名空间的pod
kubectl -n aaa exec -it busybox-aaa /bin/sh
ping bbb命名空间的pod
结论:发现能够ping通
2.相同命名空间的POD能不能通过Service访问
OK
删除错误的svc和pod
查看创建aaa的svc和pod资源,查看bbb的svc和pod资源
发现没有ping
想办法安装ping命令
apt-get update
安装成功
apt-get install -y inetutils-ping
测试ping成功
ping nginx-aaa-svc
ping不同命名空间的svc就不行
ping nginx-bbb-svc
3.不同命名空间的POD能不能通过Service访问
直接访问另一个命名空间的资源是不通的
/ # ping nginx-svc
ping: bad address 'nginx-svc'
如果需要访问不同命名空间的资源,需要在资源名称后面加上这个资源所在的命名空间
/ # ping nginx-svc.aaa
PING nginx-svc.aaa (10.1.133.59): 56 data bytes
64 bytes from 10.1.133.59: seq=0 ttl=64 time=0.109 ms
64 bytes from 10.1.133.59: seq=1 ttl=64 time=0.072 ms
ping nginx-bbb-svc.bbb
总结:nginx测试的资源配置
[root@master ~/k8s_yml/namespace]# cat nginx-aaa-pod.yml
apiVersion: v1
kind: Pod
metadata:
namespace: aaa
name: nginx-aaa-pod
labels:
app: nginx-aaa
spec:
containers:
- name: nginx-aaa
image: nginx:1.14.0
imagePullPolicy: IfNotPresent
[root@master ~/k8s_yml/namespace]# cat nginx-aaa-svc.yml
apiVersion: v1
kind: Service
metadata:
namespace: aaa
name: nginx-aaa-svc
spec:
selector:
app: nginx-aaa
ports:
- name: nginx-aaa
port: 80
protocol: TCP
targetPort: 80
[root@master ~/k8s_yml/namespace]# cat nginx-bbb-pod.yml
apiVersion: v1
kind: Pod
metadata:
namespace: bbb
name: nginx-bbb-pod
labels:
app: nginx-bbb
spec:
containers:
- name: nginx-bbb
image: nginx:1.14.0
imagePullPolicy: IfNotPresent
[root@master ~/k8s_yml/namespace]# cat nginx-bbb-svc.yml
apiVersion: v1
kind: Service
metadata:
namespace: bbb
name: nginx-bbb-svc
spec:
selector:
app: nginx-bbb
ports:
- name: nginx-bbb
port: 80
protocol: TCP
targetPort: 80