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