k8s初步使用
文章目录
一、简介
k8s(kubernetes)是基于容器技术的分布式架构,这里介绍k8s的初始使用,以部署自定义项目到k8s为例。
二、特点
kubernetes源于古希腊,是舵手的意思,相较于docker如驮着集装箱的鲸鱼,则k8s确保鲸鱼按设定路径走,这是对k8s某种层面的理解。k8s是基于容器技术的分布式架构,是一切以服务为中心,一切围绕服务运转。对服务能自我扩展、自我诊断、在线扩容等。
三、准备
在开始使用前,先安装k8s,这里直接使用docker中的k8s模块,步骤如下:
-
先安装docker:
wget -qO- https://get.docker.com/ | sh
-
在安装好的docker操作界面,在设置中,选择Kubernetes,选中 Enable Kubernetes和Show system containers(advanced),再选择右下角的Apply&Restart,即应用并重启
此时k8s便安装完成。
验证,输入命令:
kubectl version
四、基础
在k8s中,所有东西都是资源。都是可以通过yaml文件创建的。
4.1 核心概念
4.1.1 模块
cluster: k8s集群
node: 运行pod的真实物理机或虚拟机
pod: k8s调度的最小单元,相当于逻辑主机,有自己的ip地址,内运行多个容器
rc(replication controller): 保证指定数量的pod运行,太多则杀死多的,太少则新建不足个数
rs(replicaSet):和rc类似,也是复本控制器,rs支持新的selector等
namespace: 对一组资源和对象的抽象,如pods、services、replication controller、deployments等,用于隔离不同用户
service: pod是有生命周期的,如创建、销毁。service则是对一组pod的策略抽象
volume: 目录挂载
4.1.2 ip
nodeIp:node的ip,即是物理节点的ip;
podIp:pod的ip,即是docker容器的ip,是虚拟ip;
clusterIp:service的ip,k8s内部访问的ip
4.1.2 端口
port:k8s内部间访问service端口,通过clusterIp:port访问
nodePort:外部访问k8s中service端口,通过nodeIp:nodePort访问
targetPort:pod端口,通过port和nodePort访问的流量经过kube-proxy转到pod的targetPort上,进入容器
containerPort:pod内部容器端口,targetPort映射到containerPort端口上
4.2 常用命令
4.2.1 kubectl命令
常用操作:
创建:kubectl create -f 资源.yaml, 如kubectl create -f springBootK8sDeployment.yaml
查看:kubectl get ,如:kubectl get pods 或 kubectl get deployments 或 kubectl get namespaces 等
查看:kubectl describe, 如:kubectl delete deployment spring-boot-k8s
日志查看:kubectl logs , 如:kubectl logs nginx-one-67597c6c54-5z7h2
删除:kubectl delete,如:kubectl delete svc spring-boot-k8s-service
进入容器:
kubectl exec -it podName bash
如:kubectl exec -it nginx-one-67597c6c54-h28nj bash
五、部署流程
k8s项目发布流程:
1、创建待发布项目;
2、进入项目根目录下,创建Dockerfile,生成镜像:docker build -t spring-boot-k8s:latest .
3、创建docker仓库并推送新生成镜像到仓库中(docker本地仓库需要先自建)
4、在k8s运行服务, kubectl run spring-boot-k8s --image=localhost:20003/spring-boot-k8s --replicas=3 --port=10016
5、创建服务,外界可访问:kubectl expose deployment spring-boot-k8s --port=10016 --target-port=10016 --name=spring-boot-k8s-service --type=NodePort
6、查看nodePort,即外界可访问端口; kubectl describe svc spring-boot-k8s-service
其中上面步骤3中的创建docker仓库并推送新生成镜像到仓库中,参考如下:
#拉取registry镜像
docker pull registry
#运行registry,端口映射为20003,即外部访问端口为20003
docker run -d -p 20003:5000 registry
#先打tag
docker tag spring-boot-k8s localhost:20003/spring-boot-k8s
#推镜像到私有仓库
docker push localhost:20003/spring-boot-k8s
六、示例
创建pod及service,在前面部署流程中以命令创建方式展示了,接下来示例则采用另一种方式,直接通过文件创建。这里以部署项目spring_boot_k8s到k8s中为例。
6.1 创建目标项目
这里使用spring boot方式创建示例项目,关键文件如下:
controller类:
package com.dragon.study.spring_boot_k8s.controller;
import org.springframework.web