在Kubernetes (K8S) 中,我们可以使用Nexus私有仓库来管理和存储应用程序的容器镜像。本文将引导你如何在K8S集群中使用Nexus私有仓库,包括设置Nexus仓库、创建镜像Pull Secrets和部署应用程序。

## 流程概述
为了在K8S集群中连接到Nexus私有仓库,我们需要按照以下步骤进行操作:

| 步骤 | 描述 |
| ------ | ------ |
| 步骤 1 | 创建或配置Nexus私有仓库 |
| 步骤 2 | 创建镜像Pull Secrets |
| 步骤 3 | 部署应用程序 |

现在我们将逐步解释每个步骤所需做的事情,并且为每个步骤提供相应的示例代码。

### 步骤 1:创建或配置Nexus私有仓库
在这一步骤中,我们将创建或配置一个Nexus私有仓库,用于存储我们的容器镜像。

示例代码:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nexus-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nexus
template:
metadata:
labels:
app: nexus
spec:
containers:
- name: nexus
image: sonatype/nexus3
ports:
- containerPort: 8081
volumeMounts:
- mountPath: /nexus-data
name: nexus-data
volumes:
- name: nexus-data
persistentVolumeClaim:
claimName: nexus-pvc
```

上述示例代码创建了一个名为`nexus-deployment`的Deployment资源,并使用`sonatype/nexus3`镜像创建一个容器。该部署将在K8S集群中创建一个Nexus私有仓库,并将存储卷`nexus-data`安装在`/nexus-data`路径下。

### 步骤 2:创建镜像Pull Secrets
为了从Nexus私有仓库中拉取镜像,我们需要创建一个镜像Pull Secrets,并将其添加到K8S集群中。

示例代码:
```yaml
apiVersion: v1
kind: Secret
metadata:
name: nexus-secret
labels:
app: my-app
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson:
```

首先,我们需要在本地机器上创建一个[DOCKER_CONFIG_JSON](https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod)文件,其中包含了连接到Nexus私有仓库的认证信息。然后,将该文件的内容进行Base64编码,并将编码后的结果替换``。

然后,我们可以通过使用`kubectl`命令将该Secret添加到K8S集群中:
```bash
kubectl apply -f secret.yaml
```

### 步骤 3:部署应用程序
在这一步中,我们将部署一个应用程序,并在其配置中设置Nexus私有仓库的信息,以便从中获取镜像。

示例代码:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: /my-app
ports:
- containerPort: 8080
env:
- name: DOCKER_USERNAME
valueFrom:
secretKeyRef:
name: nexus-secret
key: .dockerconfigjson
- name: DOCKER_PASSWORD
valueFrom:
secretKeyRef:
name: nexus-secret
key: .dockerconfigjson
```

上述示例代码创建了一个Deployment资源,并使用Nexus私有仓库中的镜像`/my-app`来部署一个应用程序。在Pod的环境变量中,我们通过引用之前创建的镜像Pull Secrets(nexus-secret)来设置`DOCKER_USERNAME`和`DOCKER_PASSWORD`,这些信息将用于从Nexus私有仓库中拉取镜像。

请将``替换为你的Nexus私有仓库地址。

以上就是使用K8S集群连接到Nexus私有仓库的步骤和示例代码。通过按照这些步骤操作,你可以轻松地在K8S集群中管理和存储你的应用程序镜像。希望本文对你有所帮助!