k8s问题集锦

本文探讨了Minikube中遇到的常见问题,如镜像下载失败、服务URL拒绝连接和持久化存储设置。通过调整镜像源、端口转发和配置持久卷,提供了详细的解决方案和步骤,涉及Deployment、ReplicaSet和StatefulSet的区别。

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

minikube start直接启动后,Create a Deployment时下载镜像失败

报错:Failed to pull image “k8s.gcr.io/echoserver:1.4”: rpc error: code = Unknown desc = Error response from daemon: Get “https://k8s.gcr.io/v2/”: dial tcp 108.177.125.82:443: i/o timeout (Client.Timeout exceeded while awaiting headers
分析:由于网络和防火墙的原因,通常会无法拉取k8s相关镜像或者下载速度过于缓慢,因此,我们可以通过参数–image-repository来设置Minikube使用阿里云镜像
解决:minikube start --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers


minikube service返回的url请求拒绝连接

背景:
kubectl create deployment nginx --image=nginx:1.14.2
kubectl expose deployment nginx --port=80 --type=NodePort
minikube service nginx
分析:由于minikube start启动时,自动选择了docker作为驱动,minikube运行在docker容器内,不是直接运行在主机上的
minikube ip为docker容器的ip, minikube ssh登录到容器后,minikube-id:node-port可以正常访问
minikube start --driver=docker 配置驱动(新版k8s无法配置)
解决:kubectl port-forward service/nginx 8080:80--通过localhost:8080成功访问


volumes-volumeMounts,pod-pv-pvc之间的调用关系

PersistenVolume(PV):Kubernetes中的一个存储资源对象
PersistentVolumeClaim(PVC):让用户不需要关心具体的Volume实现细节
在这里插入图片描述
参考:https://www.cnblogs.com/fat-girl-spring/p/14545547.html


minikube部署mysql,指定启动命令“mysqld --lower_case_table_names=1 --skip-ssl --character_set_server=utf8 --explicit_defaults_for_timestamp”

示例:
下面展示一些 内联代码片

apiVersion: apps/v1
kind: Deployment
metadata:
  name: ivas-mysql
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: ivas-mysql
  template:
    metadata:
      labels:
        app: ivas-mysql
    spec:
      volumes:
      - name: data
        emptyDir: {}
      containers:
      - name: mysql
        image: mysql:5.7.20
        env:
        - name: MYSQL_USER
          value: ivas
        - name: MYSQL_PASSWORD
          value: QWE123rt 
        - name: MYSQL_ROOT_PASSWORD
          value: QWE123rt
        - name: MYSQL_DATABASE
          value: ivas
        command:
        - mysqld
        - --user=mysql
        - --lower_case_table_names=1
        - --skip-ssl
        - --character_set_server=utf8
        - --explicit_defaults_for_timestamp
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql/
      initContainers :
      - name: mysql-init
        image: mysql:5.7.20
        env:
        - name: MYSQL_USER
          value: ivas
        - name: MYSQL_PASSWORD
          value: QWE123rt 
        - name: MYSQL_ROOT_PASSWORD
          value: QWE123rt
        - name: MYSQL_DATABASE
          value: ivas
        command:
        - mysqld
        - --initialize-insecure
        - --user=mysql
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql/
---
apiVersion: v1
kind: Service
metadata:
  name: ivas-mysql
  namespace: default
spec:
  selector:
    app: ivas-mysql
  type: NodePort
  ports:
  - port: 3306

注:使用了initContainers,env配置参数无效了
异常:Please read “Security” section of the manual to find out how to run mysqld as root!
处理:启动命令增加参数 --user=mysql
异常:Can’t open and lock privilege tables: Table ‘mysql.user’ doesn’t exist
处理:通过initContainers运行命令“mysqld --initialize-insecure --user=mysql“,初始化mysql
注:–initialize-insecure初始化时,root无登录密码,可以通过以下命令修改密码
use mysql;
update user set authentication_string=password(“QWE123rt”) where user=“root”;
异常:执行kubectl port-forward service/ivas-mysql 3306:3306命令,暴露mysql服务,客户端连接时异常”mysql is not allowed to connect to this mysql server“
处理:update user set host = ‘%’ where user =‘root’;


Deployment与ReplicaSet关系

1、通过kubectl create 创建一个deployment,那么此时就会调用Deployment-Controller(deployment控制器)创建一个ReplicaSet
2、ReplicaSet调用ReplicaSet-Controller创建pod
3、Pod创建完之后就会由启用资源调度程序,pod分配对应的node节点,由kubelet管理pod

Deployment与StatefulSet区别

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值