一、部署 harbor 服务器
修改主机名
hostnamectl set-hostname hub.m.com
所有节点加上主机名映射
echo '192.168.23.20 hub.m.com' >> /etc/hosts
安装 docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
mkdir /etc/docker
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"insecure-registries": ["https://hub.m.com"]
}
EOF
systemctl start docker
systemctl enable docker
所有 node 节点都修改 docker 配置文件,加上私有仓库配置
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"insecure-registries": ["https://hub.m.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
安装 Harbor
# 上传 harbor-offline-installer-v1.2.2.tgz 和 docker-compose 文件到 /opt 目录
cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
tar zxvf harbor-offline-installer-v1.2.2.tgz
cd harbor/
vim harbor.cfg
5 hostname = hub.m.com
9 ui_url_protocol = https
24 ssl_cert = /data/cert/server.crt
25 ssl_cert_key = /data/cert/server.key
59 harbor_admin_password = Harbor123123
生成证书
mkdir -p /data/cert
cd /data/cert
# 生成私钥
openssl genrsa -des3 -out server.key 2048
# 输入两遍密码:123123
# 生成证书签名请求文件
openssl req -new -key server.key -out server.csr
输入私钥密码:123123
输入国家名:CN
输入省名:BJ
输入市名:BJ
输入组织名:m
输入机构名:m
输入域名:hub.m.com
输入管理员邮箱:admin@m.com
其它全部直接回车
#备份私钥
cp server.key server.key.org
#清除私钥密码
openssl rsa -in server.key.org -out server.key
# 输入私钥密码:123123
#签名证书
openssl x509 -req -days 1000 -in server.csr -signkey server.key -out server.crt
chmod +x /data/cert/*
生成 harbor
cd /opt/harbor/
./install.sh
在本地使用火狐浏览器访问:https://hub.m.com
添加例外 -> 确认安全例外
用户名:admin
密码:Harbor123123
在每个node节点上登录harbor 私有仓库
docker login -u admin -p Harbor123123 https://hub.m.com
二、上传镜像到 harbor私有仓库
浏览器访问 harbor 服务器,创建项目
在 node01 节点获取 tomcat 镜像
docker pull tomcat:8.0.52
docker images
创建tomcat标签
docker tag tomcat:8.0.52 hub.m.com/my/tomcat:v1
docker images
上传镜像
docker push hub.m.com/my/tomcat:v1
三、创建 harbor 登录凭据资源清单
创建 harbor 登录凭据资源清单,用于 K8S 访问 Harbor 私服拉取镜像所需要的密钥权限凭证 secret 资源
docker login -u admin
# 在登录过harbor服务器的节点操作,查看登录凭证
cat /root/.docker/config.json | base64 -w 0
ewoJImF1dGhzIjogewoJCSJodWIubS5jb20iOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2U0dGeVltOXlNVEl6TVRJeiIKCQl9Cgl9Cn0=
编辑secret yaml文件
secret是用于存储敏感信息的一种机制,如API密钥、密码、证书等。这些敏感信息可以被Pod容器挂载,以便在应用程序内部使用
vim harbor-pull-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: harbor-pull-secret
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSJodWIubS5jb20iOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2U0dGeVltOXlNVEl6TVRJeiIKCQl9Cgl9Cn0=
type: kubernetes.io/dockerconfigjson
创建secret
kubectl apply -f harbor-pull-secret.yaml
kubectl get secret
四、创建资源
编辑资源yaml文件
vim tomcat-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-tomcat
spec:
replicas: 2
selector:
matchLabels:
app: my-tomcat
template:
metadata:
labels:
app: my-tomcat
spec:
imagePullSecrets:
- name: harbor-pull-secret
containers:
- name: my-tomcat
image: hub.m.com/my/tomcat:v1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-tomcat
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
nodePort: 31111
selector:
app: my-tomcat
创建pod资源
kubectl apply -f tomcat-deployment.yaml
kubectl get pod
五、检验
kubectl get svc
浏览器访问:192.168.23.5:31111