Minikube-Kubernetes本地环境进行开发
Minikube-Kubernetes本地环境进行开发
使用Minikube
启动Minikube
# 启动 指定国内仓库
# minikube start --image-mirror-country='cn'
minkube start
# 检查状态
minikube status
host: Running
kubelet: Running
apiserver: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
# 访问面板
$ minikube dashboard
# 访问web前端
$ kubectl proxy
获取命名空间
# kubectl get namespaces
# 切换命名空间可以使用: kubens
$ kubectl get ns
NAME STATUS AGE
default Active 156m
kube-node-lease Active 156m
kube-public Active 156m
kube-system Active 156m
获取集群信息
$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443
KubeDNS is running at https://192.168.99.100:8443/api/v1/namespaces/kube-system/services/kube-
dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
获取节点信息
$ kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready master 162m v1.14.1
运行nginx
直接生成Pod
,暴露Service
# 运行nginx 这里是直接运行pod
$ kubectl run nginx --image=nginx:1.21 --port=80 --labels="app=nginx,env=dev"
# 增加新标签
# kubectl label pod $POD_NAME app2=test
# 发布服务采用对外暴露节点
# NodePort 需要被外部访问
# TargetPort
# Port
# HostPort
$ kubectl expose pod nginx --type=NodePort
# 访问
$ minikube service nginx --url
# 删除
kubectl delete -n default service,pod nginx
kubectl delete -n default service,pod -l app=nginx
kubectl delete -n default all -l app=nginx
生成Deployment
kubectl create deployment nginx --image=nginx:1.21 --port=80 --replicas=1
# 这里会生成Service,通过--type=NodePort可被外部访问
kubectl expose deployment nginx --type=NodePort --port=80 --labels="app=nginx,env=dev"
获取pods
$ kubectl get pods
# 根据标签查询
# kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-fcb945956-t8bqq 1/1 Running 0 67s
# 获取pod详细信息
# kubectl describe pods -l app=nginx
查看Pod日志
kubectl logs $POD_NAME
进入Pod中
# 查看环境
# kubectl exec $POD_NAME env
$ kubectl exec -ti nginx-fcb945956-t8bqq /bin/bash
获取deployment
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 18m
# 获取描述
$ kubectl describe deployment
Name: nginx
Namespace: default
CreationTimestamp: Wed, 15 May 2019 23:29:23 +0800
Labels: app=nginx
env=dev
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx,env=dev
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
env=dev
Containers:
nginx:
Image: nginx:1.16
Port: 8081/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-fcb945956 (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 18m deployment-controller Scaled up replica set nginx-fcb945956 to 1
获取svc(services)
# kubectl get svc
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 3h8m
nginx NodePort 10.105.192.17 <none> 80:31199/TCP 5m9s
# 获取详情
$ kubectl describe services
Name: kubernetes
Namespace: default
Labels: component=apiserver
provider=kubernetes
Annotations: <none>
Selector: <none>
Type: ClusterIP
IP: 10.96.0.1
Port: https 443/TCP
TargetPort: 8443/TCP
Endpoints: 192.168.99.100:8443
Session Affinity: None
Events: <none>
Name: nginx
Namespace: default
Labels: app=nginx
env=dev
Annotations: <none>
Selector: app=nginx,env=dev
Type: NodePort
IP: 10.105.192.17
Port: <unset> 80/TCP
TargetPort: 80/TCP
NodePort: <unset> 31199/TCP
Endpoints: 172.17.0.5:80
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
使用Minikube获取服务访问地址
# 获取服务url
$ minikube service nginx --url
# 访问测试
$ curl $(minikube service nginx --url)
删除服务
# kubectl delete deployments --all
$ kubectl delete deployments -l app=nginx
# kubectl delete pods --all
$ kubectl delete pods -l app=nginx
# 删除service
kubectl delete service -l app=nginx
停止Minikube
minikube stop
可能遇到的问题
kube-proxy无法正常启动
可能造成的影响有minikube dashboard --alsologtostderr -v=1
启动dashboard发现报错503
通过以下命令查看日志
# 获取所有运行的pod
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx 1/1 Running 10 8d
kube-system coredns-54d67798b7-q7css 0/1 Running 10 8d
kube-system etcd-minikube 1/1 Running 11 8d
kube-system kube-apiserver-minikube 1/1 Running 11 8d
kube-system kube-controller-manager-minikube 1/1 Running 11 8d
kube-system kube-proxy-97lq4 0/1 CrashLoopBackOff 93 8d
kube-system kube-scheduler-minikube 1/1 Running 11 8d
kube-system storage-provisioner 0/1 CrashLoopBackOff 81 8d
kubernetes-dashboard dashboard-metrics-scraper-c95fcf479-65spj 1/1 Running 10 8d
kubernetes-dashboard kubernetes-dashboard-6cff4c7c4f-46x4k 0/1 CrashLoopBackOff 79 8d
# 查看proxy日志
$ kubectl logs -f kubernetes-dashboard-6cff4c7c4f-46x4k -n kube-system
W0207 06:50:25.361857 1 proxier.go:661] Failed to load kernel module ip_vs with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W0207 06:50:25.363017 1 proxier.go:661] Failed to load kernel module ip_vs_rr with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W0207 06:50:25.364149 1 proxier.go:661] Failed to load kernel module ip_vs_wrr with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
W0207 06:50:25.365165 1 proxier.go:661] Failed to load kernel module ip_vs_sh with modprobe. You can ignore this message when kube-proxy is running inside container without mounting /lib/modules
I0207 06:50:25.383182 1 node.go:172] Successfully retrieved node IP: 192.168.49.2
I0207 06:50:25.383211 1 server_others.go:142] kube-proxy node IP is an IPv4 address (192.168.49.2), assume IPv4 operation
W0207 06:50:25.401386 1 server_others.go:578] Unknown proxy mode "", assuming iptables proxy
I0207 06:50:25.401514 1 server_others.go:185] Using iptables Proxier.
I0207 06:50:25.401820 1 server.go:650] Version: v1.20.0
I0207 06:50:25.402289 1 conntrack.go:100] Set sysctl 'net/netfilter/nf_conntrack_max' to 524288
F0207 06:50:25.402321 1 server.go:495] open /proc/sys/net/netfilter/nf_conntrack_max: permission denied
修复:
sysctl net.netfilter.nf_conntrack_max # 查看限制
sysctl net.netfilter.nf_conntrack_count # 查看当前是否超限
# 修改限制
sudo echo net.ipv4.netfilter.ip_conntrack_max=524288 >> /etc/sysctl.conf
# 刷新
sudo sysctl -p