1.本文概念解析
ConfigMap:yaml中引用的配置文件。(如同springboot中能够全局常量)
Service:暴露容器的网络使得外部端口得以访问内部容器的信息。
Deployment:监控和管理pod。(如同tomcat,管理多个项目)
Pod:可以拥有多容器,最小调度单位。(docker容器)
namespace:用于实现多租户的资源隔离。(不同的Deployment存放于不同位置,方便操作)
2.安装私服
请参考上文harbor安装与使用
3.上传镜像到私服
请参考上文harbor安装与使用
4.新建namespace
apiVersion: v1 kind: Namespace metadata: name: eureka #空间名称 labels: name: eureka 复制代码
在3处执行以下代码,注意空间名称自行修改。
5.开放端口号
k8s默认的端口号范围为30000-32767,如果需要使用其他端口,需要重新配置,请执行以下命令。
vi /etc/kubernetes/manifests/kube-apiserver.yaml 复制代码
添加需要使用的端口号范围。
--service-node-port-range=2-65535 复制代码
如果修改配置文件,需要重新启动!
systemctl daemon-reload systemctl restart kubelet 复制代码
6.在工作空间中创建springboot项目
此操作也可以称为在namespace中添加pod。
向3处复制以下配置。
apiVersion: v1 #于k8s集群版本有关,使用kubectl api-servrsions 即可查看当前集群支持的版本 kind: Service metadata: name: eureka namespace: eureka labels: app: eureka spec: #这是关于该 Service 的定义,描述了 Service 如何选择 Pod,如何被访问 type: NodePort ports: - port: 5001 nodePort: 31666 selector: app: eureka --- apiVersion: apps/v1 kind: Deployment #对象类型 #该配置的类型,我们使用的是deployment metadata: #译名为元数据,即deployment的一些基本属性和信息 name: eureka #deployment的名称 labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组 app: eureka #为该deployment设置key为app value为nginx的标签 spec: #这是关于该deployment的描述,可以理解为你期待该deployment再k8s中如何使用 replicas: 1 #运行容器的副本数,修改这里可以快速修改分布式节点数量 selector: #标签选择器,与上面的标签共同作用 matchLabels: #选择包含标签app:nginx的资源 app: eureka template: #这是选择或创建pod的模板 metadata: #pod的元数据 labels: #pod的标签,上面的selector即选择包含标签app:nginx的pod app: eureka spec: #期待pod实现的功能(即在pod中部署) containers: #生成container,与docker中的container是同一种 - name: eureka #container的名称 image: 192.168.41.44:9000/eureka/eureka:latest #私服镜像 imagePullPolicy: IfNotPresent #pull镜像时机 ports: - containerPort: 5001 #容器对外开放端口 nodeName: eureka #执行发布的node 复制代码
请根据个人配置,按照上文备注自行修改。
7.重新发布pod
直接删除pod即可,k8s会直接按照已经添加的配置拉取新的镜像重新发布项目。
8.删除pod
1.宿主机操作
如果想删除pod,请使用宿主机命令行执行以下命令,删除deployment。
kubectl get deployment -n eureka kubectl delete deployment eureka -n eureka 复制代码
2.dashboard面板操作
也可以使用dashboard直接操作,分别删除deployment和pod,详情见下图。
请保证上述删除顺序。
9.异常解析
1.failed to set bridge addr: "cni0" already has an IP address different from
如果出现此报错,可能是nodes多次加入master照成网络冲突,在nodes执行下面命令,重新加入。
kubeadm reset systemctl stop kubelet systemctl stop docker rm -rf /var/lib/cni/ rm -rf /var/lib/kubelet/* rm -rf /etc/cni/ ifconfig cni0 down ifconfig flannel.1 down ifconfig docker0 down ip link delete cni0 ip link delete flannel.1 systemctl start docker systemctl start kubelet kubeadm join xxxxxxxxxxxxxxxxxx 复制代码
2.found a tab character that violates indentation/found character that cannot staart any token
如果出现以下报错,请检查以上yaml是否格式错误 如:tab代替空格 需要空格等