## 部署docker（19版本的）

注意！不能大于20版本，否则与minikube不兼容

网上下载好安装包docker-19.03.0.tgz

解压到/root目录

```
tar -xvf /root/docker-23.0.2.tgz

#移动到bin下
mv /root/docker/* /usr/bin/ 
```

启用systemctl管理（即systemctl start docker）

```
echo '[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target'>/usr/lib/systemd/system/docker.service

#启动docker
systemctl daemon-reload 
systemctl enable docker
systemctl start docker

#检查docker版本
docker info
```

切换一下docker镜像源（外国的太慢了，使用国内的）

创建目录

```
mkdir /etc/docker
```

创建源加速文件（国内源）

```
vim daemon.json
```

```
{
    "registry-mirrors": [
        "https://dockerproxy.com",
        "https://hub-mirror.c.163.com",
        "https://mirror.baidubce.com",
        "https://ccr.ccs.tencentyun.com"
    ]
}
{
    "registry-mirrors": ["https://dockerproxy.com"]
}
```

# 部署minikube（最新版本就行了）

Minikube 是 Kubernetes 的轻量级实现，它是一个开源的工具，用于在本地计算机上运行单节点的 Kubernetes 集群。

Minikube 可以让用户在自己的机器上使用 Kubernetes 安装、运行和测试 Kubernetes 应用，而无需拥有多节点的完整 Kubernetes 集群。

使用 Minikube，您可以快速、简便地在本地计算机上安装和运行 Kubernetes，这对于开发和测试应用程序是很有用的。您可以使用标准的 Kubernetes 工具和命令行界面来管理 Minikube 集群，并且 Minikube 包含对许多 Kubernetes 功能的支持，例如容器跨节点通信、存储卷、服务发现、负载均衡和其他功能。

由于 Minikube 是一个单节点的 Kubernetes 集群，它不能满足生产环境的高可用性和可扩展性要求，但是在本地开发和测试环境中，Minikube 是非常实用和有用的工具。

官网有详细操作（[minikube start | minikube (k8s.io)](https://minikube.sigs.k8s.io/docs/start/)）

```
#官网方式部署安装
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

```

启动minikube

```
minikube start  --force     （默认docker来做容器）
或minikube start  --force  --driver=docker
```

注意！拉取特别慢，两个命令重复使用一下，网络速度决定

成功拉取如图所示

![image-20230616171519840](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230616171519840.png)



查看minikube状态

```
minikube status
```

启动正常如下

![](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230616171601243.png)

拉取k8s集群

```
minikube kubectl -- get pods -A
```

![image-20230616171654316](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230616171654316.png)

```
alias kubectl="minikube kubectl --"
可以直接在shell使用k8s的命令，不用加minikube
```

# 创建安管容器所需要的pv，pvc资源池

在 Kubernetes 中，PV 和 PVC 是两个用来管理存储资源的对象。

PV（Persistent Volume）是一种网络存储资源，它可以在 Kubernetes 集群的节点上提供持久化存储。PV 可以使用多种协议来访问存储资源，例如 NFS、iSCSI、本地存储器、云存储等。PV 提供了对存储资源的抽象，使得应用程序可以从该存储资源中获得稳定的、可靠的存储。

PVC（Persistent Volume Claim）是应用程序请求持久性存储资源的一种方式。当一个应用需要使用持久性存储时，它可以创建一个 PVC 来请求一个或多个 PV。PVC 定义了存储的容量、访问模式和其他要求。Kubernetes 调度器会尝试在集群中为 PVC 分配满足其要求的 PV。

PVC 和 PV 之间的关系可以类比于一个“租户”和“出租人”的关系。PVC 描述了应用程序希望得到的存储资源，而 PV 则描述了实际的存储资源。PVC 请求一种存储资源的特定类型、大小、访问模式等，而 PV 匹配这些要求并满足这些要求。如果一个 PVC 请求成功地与一个 PV 绑定，那么该应用程序可以使用持久化存储资源了。

简单来说，PV 是一种存储资源，PVC 是一种存储请求。使用 PV 和 PVC 来管理存储资源可以使得应用程序流程管理更加简洁和灵活，并支持高可用性的存储。

注意！分开创建，否则资源池会相互占用

```
报错  volume  sm-share-pv” already bound to a different claim.  就是这么回事
```

创建好资源目录

```
mkdir -p /data/redis/1
mkdir -p /data/securemanagement/1
mkdir -p /data/mysql/1
```

创建命名空间securemanagement

```
kubectl create namespace securemanagement
```

## mysql资源创建

```
vim  mysql.yaml


apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-data-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 50Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/mysql/1"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata: 
  name: mysql-data-pvc
  namespace: securemanagement
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  volumeName: mysql-data-pv
```

```
#创建
kubectl apply -f  mysql.yaml
```

## securemanagement资源创建

```
vim  se.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: sm-share-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 20Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/securemanagement/1"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sm-share-pvc
  namespace: securemanagement
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  volumeName: sm-share-pv
```

```
#创建
kubectl apply -f se.yaml
```

## redis资源创建

```
vim redis.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: redis-data-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 30Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/data/redis/1"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: redis-data-pvc
  namespace: securemanagement
spec:
  storageClassName: manual
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  volumeName: redis-data-pv

```

```
#创建
kubectl apply -f redis.yaml
```

检查pvc是否创建成功

```
 kubectl get pvc -n securemanagement
```

![image-20230616172624911](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230616172624911.png)

全部Bound即是创建成功

```
 kubectl get pv -n securemanagement
```

![image-20230616172717216](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230616172717216.png)



# 导入相关镜像

```
docker load  <  镜像压缩包
```

```
#查看
docker images
#build一下
使用 minikube image build 命令的主要优势是，您可以直接在本地开发环境中构建镜像，然后将其集成到 Kubernetes 模拟环境中，以便进行本地测试。这样可以大大简化应用程序的构建和测试过程，因为您可以在构建镜像后，直接使用 kubectl 命令将其部署到 minikube 中。
minikube image build 
```

![image-20230616173125371](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230616173125371.png)

# 创建容器

然后通过相对应的yaml文件创建容器

![image-20230616173210435](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230616173210435.png)

```
kubectl apply -f  xxx.yaml       #创建pod
```

创建成功如图所示，状态全部running

```
kubectl get po -A        #查看pod
```

![image-20230616173249997](https://ye5201314-1312898079.cos.ap-guangzhou.myqcloud.com/image-20230616173249997.png)

```
user nginx;
worker_processes auto;
pid /run/nginx.pid;

events {
  worker_connections 1024;
}

stream {
  upstream mybackend {
    server 182.42.233.54:31169;
  } 

  server {
    listen  18443;
    proxy_pass mybackend;
    proxy_connect_timeout 5s;
    proxy_timeout 10s;
  }
}
docker run --name  nginx--net minikube -d nginx

docker run -d --name nginx-proxy  --net minikube -p 18443:18443 -v /root/nginx.conf:/etc/nginx/nginx.conf:rw nginx

docker run --name nginx --net minikube  -v /root/nginx.conf:/etc/nginx/nginx.conf:rw -v /root:/etc/nginx/logs:rw -p 18443:18443  -d nginx:latest

minikube service list
```

```
# General
minikube image load <IMAGE_NAME>
# Example
minikube image load pz/demo
```

```
您还可以使用以下命令来获取关于 Minikube 集群的详细网络信息：

minikube addons list

要查看 Minikube 集群的网络信息，您可以使用以下命令：

minikube ip

您想查看容器的所有网络配置信息，可以使用以下命令：

docker inspect <容器ID或容器名称>

还可以使用以下命令来查看 Docker 容器的网络连接情况：

docker exec <容器ID或容器名称> netstat -tuln

来获取 Kubernetes 集群的网络配置：

kubectl cluster-info dump | grep -i "network"
```

