k8s搭建遇到的问题

本文介绍了Docker的基本操作,如查看镜像和容器、运行及管理容器,并重点讲解了Docker配置文件daemon.json的使用,包括设置镜像加速器、私有仓库和系统优化。通过修改daemon.json并重启Docker服务,可以实现配置的生效。此外,还提到了GPU计算的角色、CUDA与OpenCL加速技术及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#查看本地镜像
docker images
#查看本地容器
docker ps -a
#通过本地镜像运行一个容器
docker run --name 容器名  -idt 镜像名
#运行一个已经存在的容器
docker start 容器ID
#停止一个真正运行的容器
docker stop  容器ID
#删除一个停止运行的容器
docker rm 容器ID
#删除一个本地镜像
docker rmi 镜像名
#搜索docker仓库,寻找某一镜像
docker search 镜像名
#拉取某一镜像
docker pull 镜像名
#进入某一运行的容器
docker exec -it 容器名 /bin/bash
#退出某一运行的容器
exit
#将某一容器打包成镜像
docker commit -m="描述信息" -a="作者" 容器ID  目标镜像名


#容器内部的操作指令和linux指令是一样的。
#拉取一个干净的基础镜像
#docker pull centos或者docker pull ubuntu

#运行一个容器
#docker run --name 容器名  -idt 镜像名 

#进入容器
#docker exec -it 容器名 /bin/bash 

#在容器中配置环境,修改程序。

#退出容器
#exit 

#打包成镜像
#docker commit -m="描述信息" -a="作者" 容器ID 目标镜像名    

守护进程重启 systemctl daemon-reload
#GPU解决的问题
密集型数据处理和大型并行数据计算(通过并行提高吞吐量) 
#GPU厂家
intel、nvidia、amd等
#GPU与CPU区别
GPU有更多的计算单元ALU,擅长并发计算。
#cuDNN
cuDNN是nvidia打造的神经网络运算加速库

#CUDA加速技术
CUDA是由nvidia推出的并行计算架构,用来管理计算单元ALU。
CUDA只能够在nvidia的GPU硬件上运行。

#不同版本CUDA对应的nvidia驱动版本
CUDA驱动程序向后兼容,特定版本CUDA编译的应用程序在后续(更高版本)的驱动程序中工作。

#不同平台(platform)的CUDA
CUDA根据操作系统、硬件架构、发行版本来发布CUDA库,不支持跨平台。

#OpenCL加速技术
OpenCL是一个跨平台的并行计算架构,适用于异构系统上的通用计算。
异构平台可由CPU、GPU、DSP、FPGA或其他类型的处理器搭建。

Warning:detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".

执行kubeadm init集群初始化时遇到:
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd".
[警告IsDockerSystemdCheck]:检测到“cgroupfs”作为Docker cgroup驱动程序。 推荐的驱动程序是“systemd”。

所以我们更换一下驱动。
解决方法:修改docker
由于Ubuntu默认没有设置root,所以设置一下root用户
sudo passwd root

输入密码后,切换root用户:su root
在/etc/docker下创建daemon.json并编辑:
mkdir /etc/docker/daemon.json

加入以下内容:
{
 "exec-opts":["native.cgroupdriver=systemd"]
}

重启docker
systemctl restart docker
systemctl status docker
守护进程重启 systemctl daemon-reload

docker  daemon.json的作用

背景
docker安装后默认没有daemon.json这个配置文件,需要进行手动创建。配置文件的默认路径:/etc/docker/daemon.json
一般情况,配置文件 daemon.json中配置的项目参数,在启动参数中同样适用,有些可能不一样(具体可以查看官方文档),但需要注意的一点,配置文件中如果已经有某个配置项,则无法在启动参数中增加,会出现冲突的错误。
如果在daemon.json文件中进行配置,需要docker版本高于1.12.6(在这个版本上不生效,1.13.1以上是生效的)
参数 
daemon.json文件可配置的参数表,我们在配置的过程中,只需要设置我们需要的参数即可,不必全部写出来。详细参考官网。
官方的配置地址:https://docs.docker.com/engine/reference/commandline/dockerd/#/configuration-reloading。
官方的配置地址:https://docs.docker.com/engine/reference/commandline/dockerd/#options
官方的配置地址:https://docs.docker.com/engine/reference/commandline/dockerd/#/linux-configuration-file

 {
 "api-cors-header":"", 
 "authorization-plugins":[],
 "bip": "",
 "bridge":"",
 "cgroup-parent":"",
 "cluster-store":"",
 "cluster-store-opts":{},
 "cluster-advertise":"",
 "debug": true,                     #启用debug的模式,启用后,可以看到很多的启动信息。默认false
 "default-gateway":"",
 "default-gateway-v6":"",
 "default-runtime":"runc",
 "default-ulimits":{},
 "disable-legacy-registry":false,
 "dns": ["192.168.1.1"],             # 设定容器DNS的地址,在容器的 /etc/resolv.conf文件中可查看。
 "dns-opts": [],                     #  容器 /etc/resolv.conf 文件,其他设置
 "dns-search": [],               # 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的 主机时,DNS不仅搜索host,还会搜                             
                                  索host.example.com 。 注意:如果不设置, Docker 会默认用主机上的 /etc/resolv.conf 来配置容器。

"exec-opts": [],
 "exec-root":"",
 "fixed-cidr":"",
 "fixed-cidr-v6":"",
 "graph":"/var/lib/docker",              #已废弃,使用data-root代替,这个主要看docker的版本
 "data-root":"/var/lib/docker",          #Docker运行时使用的根路径,根路径下的内容稍后介绍,默认/var/lib/docker
 "group": "",                            #Unix套接字的属组,仅指/var/run/docker.sock
 "hosts": [],                           #设置容器hosts
 "icc": false,
 "insecure-registries": [],       #配置docker的私库地址
 "ip":"0.0.0.0",
 "iptables": false,
 "ipv6": false,
 "ip-forward": false,          #默认true, 启用 net.ipv4.ip_forward ,进入容器后使用 sysctl -a | grepnet.ipv4.ip_forward 查看

  "ip-masq":false,
 "labels":["nodeName=node-121"],   # docker主机的标签,很实用的功能,例如定义:–label nodeName=host-121

 "live-restore": true,
 "log-driver":"",
 "log-level":"",
 "log-opts": {},
 "max-concurrent-downloads":3,
 "max-concurrent-uploads":5,
 "mtu": 0,
 "oom-score-adjust":-500,
 "pidfile": "",                    #Docker守护进程的PID文件
 "raw-logs": false,
 "registry-mirrors":["xxxx"],      #镜像加速的地址,增加后在 docker info中可查看。
 "runtimes": {
 "runc": {
 "path": "runc"
 },
 "custom": {
 "path":"/usr/local/bin/my-runc-replacement",
 "runtimeArgs": [
 "--debug"
 ]
 }
 },
 "selinux-enabled": false, #默认 false,启用selinux支持

 "storage-driver":"",
 "storage-opts": [],
 "swarm-default-advertise-addr":"",
 "tls": true,                      #默认 false, 启动TLS认证开关
 "tlscacert": "",                  #默认 ~/.docker/ca.pem,通过CA认证过的的certificate文件路径
 "tlscert": "",                    #默认 ~/.docker/cert.pem ,TLS的certificate文件路径
 "tlskey": "",                     #默认~/.docker/key.pem,TLS的key文件路径
 "tlsverify": true,                #默认false,使用TLS并做后台进程与客户端通讯的验证
 "userland-proxy":false,
 "userns-remap":""
 }

上述是官网docs提供的一个示例配置,我们可以参考,选择性的配置其中的部分内容。

示例 
1、如何配置 registry 私库相关的参数
涉及以下2个参数:
   "insecure-registries": [],  #这个私库的服务地址
   "registry-mirrors": [],    #私库加速器
2.配置示例:
# cat /etc/docker/daemon.json
{
    "registry-mirrors": [
       "https://d8b3zdiw.mirror.aliyuncs.com"
    ],
    "insecure-registries": [
       "https://ower.site.com"
    ]
}

配置与应用
1.默认没有文件,所以我们需要先创建,进入/etc/docker目录下,记得创建的文件所有者是root(vim或touch,记得chown修改所有者)
-rw-r--r--  1 root root   71 Dec 19 17:25daemon.json

2.在文档中配置想要添加的参数:如,镜像加速器网站,私库网站
# cat /etc/docker/daemon.json
{
   "registry-mirrors":[
        "https://d8b3zdiw.mirror.aliyuncs.com"
    ],
    "insecure-registries": [
       "https://ower.site.com"
    ]}

3.创建并修改完daemon.json文件后,需要让这个文件生效

a.修改完成后reload配置文件
sudo systemctl daemon-reload
b.重启docker服务
sudo systemctl restartdocker.service
c.查看状态
sudo systemctl status docker -l
d.查看服务
sudo docker info

总结
当我们需要对docker服务进行调整配置时,不用去修改主文件 docker.service的参数,通过daemon.json配置文件来管理,更为安全、合理。对于

Docker的配置文件 daemon.json 详解

配置文件的默认路径:/etc/docker/daemon.json
常用参数选项:

{
  "registry-mirrors": ["http://harbor.test.com"], #镜像加速地址
  "insecure-registries": ["harbor.test.com","registry.cn-shenzhen.aliyuncs.com"], # Docker如果需要从非SSL源管理镜像,这里加上。
  "max-concurrent-downloads": 10
}
部分参数(registry-mirrors、insecure-registries ...)修改,只要reconfigure(systemctl reload docker) 就生效:
这部分参数详细列表:https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file

<think>好的,用户想了解如何在Kubernetes(k8s)上搭建MongoDB。我需要先理清步骤,确保覆盖关键点,同时考虑到用户可能的背景知识。 首先,用户可能对Kubernetes有一定了解,但可能不熟悉StatefulSet、PersistentVolume等概念。需要解释这些概念,但保持简洁。比如,MongoDB是有状态的应用,所以使用StatefulSet而不是Deployment,因为StatefulSet适合需要持久化存储和稳定网络标识的情况。 接下来,存储部分很重要。MongoDB需要持久化数据,所以要提到PersistentVolume(PV)和PersistentVolumeClaim(PVC)。可能需要举例说明如何配置StorageClass,特别是如果用户使用的是云服务,比如AWS的EBS或者GCP的PD。但用户可能在自己本地环境测试,所以也可以提到hostPath或NFS,但要注意生产环境不推荐。 然后,网络方面,MongoDB副本集需要内部通信,所以需要Headless Service,这样每个Pod有稳定的DNS记录。需要给出Service的YAML示例,并解释为什么用无头服务。 安全性方面,可能需要提到配置认证,比如创建用户和密码,使用Secret存储敏感信息。但用户可能刚开始搭建,可能暂时不需要认证,但应该提醒生产环境中必须启用。 副本集配置是关键步骤,因为单节点MongoDB在k8s中不够可靠。需要引导用户初始化副本集,可能通过进入Pod执行mongo shell命令,或者使用Init Container自动化这个过程。 另外,需要考虑版本兼容性,比如MongoDB的版本和Kubernetes的API版本是否匹配。例如,StatefulSet的某些功能可能在旧版本的k8s中不可用。 可能还需要提醒用户关于资源限制,设置合适的CPU和内存请求,避免节点资源不足。以及健康检查,配置liveness和readiness探针,确保MongoDB实例健康。 最后,测试步骤,如何连接到MongoDB实例,验证数据持久化,故障转移等。可能给出kubectl命令示例,比如如何port-forward到本地进行连接。 需要避免过于技术性的术语,但保持准确。分步骤说明,从创建命名空间、配置存储、部署StatefulSet和Service,到初始化副本集和验证。确保YAML示例正确,语法无误,特别是缩进和括号匹配。 可能用户遇到的问题包括PV无法绑定,Pod启动失败,副本集初始化错误等,可以适当给出排查建议,比如查看Pod日志,检查PVC状态等。 总结下来,结构应该是:介绍基本概念,详细步骤分点,YAML示例,副本集初始化,测试连接,注意事项。这样用户能逐步跟随,完成搭建。</think>在Kubernetes(k8s)中搭建MongoDB需要考虑到有状态服务的特性,以下是分步指南: --- ### 一、核心概念 1. **StatefulSet**:用于管理有状态应用,确保Pod的唯一性和持久化存储绑定 2. **PersistentVolume(PV)**:为MongoDB提供持久化存储 3. **Headless Service**:为副本集提供稳定的DNS标识 --- ### 二、部署步骤 #### 1. 创建命名空间 ```yaml apiVersion: v1 kind: Namespace metadata: name: mongo-db ``` #### 2. 创建存储配置 ```yaml # StorageClass(以AWS EBS为例) apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: mongo-storage provisioner: kubernetes.io/aws-ebs parameters: type: gp2 reclaimPolicy: Retain volumeBindingMode: WaitForFirstConsumer ``` #### 3. 部署MongoDB StatefulSet ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: mongo namespace: mongo-db spec: serviceName: mongo replicas: 3 selector: matchLabels: app: mongo template: metadata: labels: app: mongo spec: containers: - name: mongo image: mongo:5.0 command: ["mongod", "--replSet", "rs0", "--bind_ip_all"] ports: - containerPort: 27017 volumeMounts: - name: mongo-persistent-storage mountPath: /data/db volumeClaimTemplates: - metadata: name: mongo-persistent-storage spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "mongo-storage" resources: requests: storage: 10Gi ``` #### 4. 创建Headless Service ```yaml apiVersion: v1 kind: Service metadata: name: mongo namespace: mongo-db spec: clusterIP: None ports: - port: 27017 targetPort: 27017 selector: app: mongo ``` --- ### 三、初始化副本集 1. 进入任意Pod执行命令: ```bash kubectl exec -it mongo-0 -n mongo-db -- mongosh ``` 2. 在Mongo Shell中执行: ```javascript rs.initiate({ _id: "rs0", members: [ {_id: 0, host: "mongo-0.mongo.mongo-db.svc.cluster.local:27017"}, {_id: 1, host: "mongo-1.mongo.mongo-db.svc.cluster.local:27017"}, {_id: 2, host: "mongo-2.mongo.mongo-db.svc.cluster.local:27017"} ] }) ``` --- ### 四、验证部署 1. 检查Pod状态: ```bash kubectl get pods -n mongo-db -l app=mongo ``` 2. 检查副本集状态: ```bash kubectl exec mongo-0 -n mongo-db -- mongosh --eval "rs.status()" ``` --- ### 五、生产环境增强建议 1. **安全配置**:启用TLS加密通信 2. **认证配置**:创建Kubernetes Secret存储凭据 3. **资源限制**:添加CPU/内存资源请求与限制 4. **备份策略**:配置定期快照或使用MongoDB Ops Manager --- ### 六、典型问题排查 1. **Pod启动失败**:检查PVC绑定状态 `kubectl get pvc -n mongo-db` 2. **副本集无法通信**:验证DNS解析和网络策略 3. **存储性能问题**:检查StorageClass配置是否符合云平台要求 通过以上步骤,您可以在Kubernetes集群中部署高可用的MongoDB副本集。实际部署时应根据具体云环境和业务需求调整资源配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值