1 安装
打开Docker-desktop,进⼊设置,可以看到有kubernetes选项,注意不同的docker版本,这⾥的k8s版本也有区别,
你可以直接点击Enable的话,等一会,如果成功的话,就直接安装就行了,安装成功,可以看到这一个信息
安装成功
kubectl get nodes
不成功情况
如果不成功,⼤概率因为k8simage拉取问题,导致是⽆法启动的,所以这⾥要先解决镜像
可以从国内镜像源拉取,然后修改镜像名称,这样就可以了
⽐如这台电脑,⿊苹果由于系统版本10.15.7,⽀持的docker-desktop版本⽐较⽼⼀点,所以这⾥的k8s版本是v1.24.0,
修改镜像源
下⾯就可以通过写好的脚本从阿⾥云拉取镜像,注意替换你的k8s版本,关于etcd,coredns的版本可以查⼀下ChatGPT,让它快速告诉你指定k8s对应的这两者的版本,或者保持不动,因为理论上这两个基础组件在1.24和1.25变化不⼤的,应该可以兼容:
#!/bin/bash set -e KUBE_VERSION=v1.24.0 KUBE_PAUSE_VERSION=3.5 ETCD_VERSION=3.4.13-0 COREDNS_VERSION=1.8.0 GCR_URL=k8s.gcr.io ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers # get images images=(kube-proxy:${KUBE_VERSION} kube-scheduler:${KUBE_VERSION} kube-controller-manager:${KUBE_VERSION} kube-apiserver:${KUBE_VERSION} pause:${KUBE_PAUSE_VERSION} etcd:${ETCD_VERSION} coredns:${COREDNS_VERSION}) for imageName in ${images[@]} ; do docker pull $ALIYUN_URL/$imageName docker tag $ALIYUN_URL/$imageName $GCR_URL/$imageName docker rmi $ALIYUN_URL/$imageName done # show images docker images
执⾏等待拉取完毕后检查⼀下,然后就可以点击Enable了,需要等待⼏分钟。
K8S显⽰运⾏成功后,你可以在shell中运⾏kubectl命令查看节点状态:
kubectl get nodes
2 测试
部署Nginx
可以看到⼀个单节点的集群就运⾏起来了,下⾯我们简单跑⼀个development容器看⼀下集群⼯作状态是否正常,这⾥可以先不管这些yaml⽂件描述的什么,
部署 Deployment
可以使用Kubernetes来部署Nginx。以下是一个简单的Deployment示例:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 - containerPort: 443
解释一下上述的YAML文件:
kind: Deployment
表示创建一个Deployment。metadata.name:
指定Deployment的名称。spec.replicas:
设置replica数量为1。selector.matchLabels:
定义了应该匹配哪些Pod,使用app: nginx
标签匹配。template.metadata.labels:
为此Deployment创建一个独立的Pod。spec.containers:
定义了一个名为nginx的容器,在此容器中运行Nginx镜像。ports:
将容器的80公开。
执行以下命令创建Deployment:
kubectl apply -f deployment.yaml
在Kubernetes中使用kubectl get deployments
命令可以看到Deployment已经成功创建了。我们还可以使用以下命令查看Pod运行状态:
kubectl get pods
如果一切正常,你应该能够看到类似下面的输出:
NAME READY STATUS RESTARTS AGE nginx-deployment-6b67fd5895-p8qs8 1/1 Running 0 25s
部署service
现在,Nginx已经在Kubernetes中以Deployment的方式部署好了。如果需要通过外部IP访问Nginx服务,还需要创建一个Service。
可以通过创建一个Service将Nginx服务暴露给集群外部IP。
以下是一个简单的Service示例,将Nginx Service暴露的端口设置为NodePort类型,
使用NodePort类型的Service可以将集群内部的服务端口映射到集群外部的一个随机端口上:
apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - name: http protocol: TCP port: 80 targetPort: 80 nodePort: 30001 type: NodePort
解释一下上述的YAML文件:
kind: Service
表示创建一个Service。metadata.name:
指定Service的名称。spec.selector:
将Service绑定到定义了app: nginx
标签的Pod列表。spec.ports:
定义了Nginx服务的端口信息。type: NodePort
表示Service类型为NodePort,将指定的端口暴露给集群外部IP以供访问。
执行以下命令创建Service:
kubectl apply -f service.yaml
现在,我们可以通过以下命令查看创建的Service:
kubectl get services
如果一切正常,你应该能够看到类似下面的输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service NodePort 10.108.90.45 <none> 80:30001/TCP
在上面的输出结果中, 30001
端口对应着Nginx的HTTP端口,
如果你使用的是云服务提供商的集群,可以找到具体的EXTERNAL-IP地址,然后在浏览器中输入 EXTERNAL-IP:30001
来访问Nginx服务。
如果你使用的是本地单节点的集群,可以在本地使用 localhost:30001
访问Nginx服务。
完整脚本:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 - containerPort: 443 --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - name: http protocol: TCP port: 80 targetPort: 80 nodePort: 30001 type: NodePort
执行命令
kubectl apply -f nginx.yml