(1). 安装 docker-machine-driver-hyperkit
lixin-macbook:~ lixin$ brew update
lixin-macbook:~ lixin$ brew install hyperkit
lixin-macbook:~ lixin$ brew install docker-machine-driver-hyperkit
lixin-macbook:~ lixin$ sudo chown root:wheel $(brew --prefix)/opt/docker-machine-driver-hyperkit/bin/docker-machine-driver-hyperkit
lixin-macbook:~ lixin$ sudo chmod u+s $(brew --prefix)/opt/docker-machine-driver-hyperkit/bin/docker-machine-driver-hyperkit
(2). 安装 Minikube
在 https://github.com/kubernetes/minikube/releases 上下载最新的 minikube-darwin-amd64(我下载的是v1.16.0)
lixin-macbook:~ lixin$ mv ~/Downloads/minikube-darwin-amd64 ~/Downloads/minikube
lixin-macbook:~ lixin$ mv ~/Downloads/minikube /usr/local/bin/
lixin-macbook:~ lixin$ chmod +x /usr/local/bin/minikube
lixin-macbook:~ lixin$ minikube version
minikube version: v1.16.0
commit: 9f1e482427589ff8451c4723b6ba53bb9742fbb1
(3). 安装kubctl(需要翻墙)
lixin-macbook:~ lixin$ cd ~/Downloads
lixin-macbook:Downloads lixin$ curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/darwin/amd64/kubectl
lixin-macbook:Downloads lixin$ chmod +x ./kubectl
lixin-macbook:Downloads lixin$ mv ./kubectl /usr/local/bin/
lixin-macbook:Downloads lixin$ kubectl --help
(4). 启动minikube
# 启动minikube
# --cpus 2 : CPU数量
# --memory 4096 : 内存大小4096M(4G)
lixin-macbook:Downloads lixin$ minikube start --vm-driver=hyperkit --registry-mirror=https://registry.docker-cn.com --cpus 2 --memory 4096
😄 Darwin 10.15.7 上的 minikube v1.16.0
✨ 根据用户配置使用 hyperkit 驱动程序
👍 Starting control plane node minikube in cluster minikube
🔥 Creating hyperkit VM (CPUs=2, Memory=4096MB, Disk=20000MB) ...
❗ This VM is having trouble accessing https://k8s.gcr.io
💡 To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
🐳 正在 Docker 20.10.0 中准备 Kubernetes v1.20.0…
▪ Generating certificates and keys ...
▪ Booting up control plane ...
▪ Configuring RBAC rules ...
🔎 Verifying Kubernetes components...
🌟 Enabled addons: storage-provisioner, default-storageclass
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
(5). 使用kubectl
lixin-macbook:Downloads lixin$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 161m v1.20.0
(6). 关闭minikube
lixin-macbook:Downloads lixin$ minikube stop
(7). 进入Node节点
minikube实际还是个虚拟机,让k8s在这个虚拟机里工作(有时下载镜像慢之类,需要自己手工处理),以下是进入虚拟机的方法.
# 不建议用这种方式进入虚拟机,建议用第8步的方式,切换:环境到minkube
# minikube进入ssh(查看IP)
lixin-macbook:~ lixin$ minikube ssh
_ _
_ _ ( ) ( )
___ ___ (_) ___ (_)| |/') _ _ | |_ __
/' _ ` _ `\| |/' _ `\| || , < ( ) ( )| '_`\ /'__`\
| ( ) ( ) || || ( ) || || |\`\ | (_) || |_) )( ___/
(_) (_) (_)(_)(_) (_)(_)(_) (_)`\___/'(_,__/'`\____)
# 查看IP
$ ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 26:57:60:ca:c0:b6 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.2/24 brd 192.168.64.255 scope global dynamic eth0
# 查看用户名
$ whoami
docker
# 通过SSH进入(为什么这样?因为要通过SSH拷贝镜像进虚拟机里)
# 用户名和密码为:docker/tcuser
lixin-macbook:~ lixin$ ssh docker@192.168.64.2
ECDSA key fingerprint is SHA256:4BKtGOWjnZZ0dA0GyWnNMUDJg47jh/kobG1Mnv29hTM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.64.2' (ECDSA) to the list of known hosts.
docker@192.168.64.2's password:
(8). 本地(Mac)环境下的Docker客户端(DockerDaemo)指向Minikube(虚拟机)中的Docker
通过这种方式,可以不用进到虚拟机,拷贝镜像之类的,直接可以操作docker,真方便.
# 未指向之前,本地有centos镜像
lixin-macbook:eureka-server lixin$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lixinhelp/centos centos7 e698e1ac21bc 11 days ago 298MB
# 本地(Mac)Docker客户端指向Minikube(虚拟机)中的Docker
lixin-macbook:~ lixin$ eval $(minikube -p minikube docker-env)
# 查询出来的镜像是:Minikube(虚拟机)中的Docker
# 此时就可以运用:docker build . -t 打包了,或者docker load本地磁盘文件之类的.
lixin-macbook:~ lixin$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
kubernetesui/dashboard v2.1.0 9a07b5b4bfac 5 weeks ago 226MB
k8s.gcr.io/kube-proxy v1.20.0 10cc881966cf 5 weeks ago 118MB
... ...
(9). 访问Service(NodePort)暴露的服务
# 创建pod
lixin-macbook:test lixin$ cat nginx-pod.yml
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx
name: nginx-pod
spec:
containers: # 指定多个镜像,代表这些镜像在一个Pod内.
- image: nginx:latest
name: nginx
# 创建service暴露端口:9090
lixin-macbook:test lixin$ cat nginx-service.yml
apiVersion: v1
kind: Service # 定义一个Service
metadata:
labels:
app: nginx-service # Service自己的元数据信息
name: nginx-service
spec:
ports:
- port: 9090
protocol: TCP
targetPort: 80
selector:
app: nginx # 重点:Service通过该配置关联Pod的资源
type: NodePort
# 应用配置
lixin-macbook:test lixin$ kubectl apply -f .
# 查看minikube虚拟机的IP地址
lixin-macbook:test lixin$ minikube ip
192.168.64.3
# 查看service和pod信息
lixin-macbook:test lixin$ kubectl get pods,svc
NAME READY STATUS RESTARTS AGE
pod/nginx 1/1 Running 0 119m
# 9090 : 为ClusterIP
# 31224 : 为NodePortIP
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 148m
service/nginx-service NodePort 10.96.111.210 <none> 9090:31224/TCP 6m12s
# 用浏览器打开:http://192.168.64.3:31224
lixin-macbook:test lixin$ minikube service nginx-service
|-----------|---------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|---------------|-------------|---------------------------|
| default | nginx-service | 9090 | http://192.168.64.3:31224 |
|-----------|---------------|-------------|---------------------------|
🎉 正通过默认浏览器打开服务 default/nginx-service...
(10). 通过Ingress暴露的服务
我这里(minikube addons enable ingress)一直都有问题,查看日志是pull镜像失败,我根据错误信息,在Docker Hub下载:
docker pull siriuszg/nginx-ingress-controller:v0.40.2
重新打标签即可: us.gcr.io/k8s-artifacts-prod/ingress-nginx/controller:v0.40.2
直到下面这个提示,代表ingress插件安装成功.
# 添加扩展ingress
lixin-macbook:~ lixin$ minikube addons enable ingress
🔎 Verifying ingress addon...
🌟 启动 'ingress' 插件
# 默认是在:kube-system命名空间下的
lixin-macbook:~ lixin$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-74ff55c5b-b2d9k 1/1 Running 3 5h17m
etcd-minikube 1/1 Running 3 5h17m
ingress-nginx-admission-create-svtxw 0/1 Completed 0 162m
ingress-nginx-controller-558664778f-wdrkx 1/1 Running 0 162m
kube-apiserver-minikube 1/1 Running 3 5h17m
kube-controller-manager-minikube 1/1 Running 3 5h17m
kube-proxy-74bhd 1/1 Running 3 5h17m
kube-scheduler-minikube 1/1 Running 3 5h17m
storage-provisioner 1/1 Running 6 5h17m
# 创建ingress
lixin-macbook:test lixin$ cat nginx-ingress.yml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web
spec:
rules:
- host: "nginx.hello.world"
http:
paths:
- backend:
serviceName: nginx-service
servicePort: 9090
# 发布nginx-ingress.yml配置
lixin-macbook:test lixin$ kubectl apply -f nginx-ingress.yml
Warning: extensions/v1beta1 Ingress is deprecated in v1.14+, unavailable in v1.22+; use networking.k8s.io/v1 Ingress
ingress.extensions/web created
# 查看ingress是否创建成功
lixin-macbook:test lixin$ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
web <none> nginx.hello.world 192.168.64.3 80 46s
# 查看ingress详细信息
lixin-macbook:test lixin$ kubectl describe ingress web
Name: web
Namespace: default
Address: 192.168.64.3
Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
Host Path Backends
---- ---- --------
nginx.hello.world nginx-service:9090 172.17.0.3:80)
# 查看虚拟机(minikube)IP
lixin-macbook:test lixin$ minikube ip
192.168.64.3
# 在Mac机器上配置(nginx.hello.world域名与192.168.64.3的关系)
lixin-macbook:~ lixin$ cat /etc/hosts|grep nginx.hello.world
192.168.64.3 nginx.hello.world
# 测试访问
lixin-macbook:test lixin$ curl http://nginx.hello.world
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
... ...