1.用idea创建一个project,new project->spring initializr->添加一个spring web,groupId随便取,artifactId取test,点finish即可,不要用webflux

2.新建一个controller,随便写个web接口,如

@GetMapping("/{args}")

public String helloWorld(@PathVariable("args") String s){

return "hello world:"+s;

}

3.配置application.properties

server.servlet.context-path=/test

server.port=8080

4.install打包,在target目录下会生成一个jar包

5.新建一个文件,文件名为Dockerfile,文件内容为

FROM java:8

VOLUME /tmp

ADD test-1.0.0.jar app.jar

RUN bash -c 'touch /app.jar'

ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

6.把jar包和Dockerfile上传到集群内每一台机器上的同一个路径上,kubectl get nodes -o wide,查看所有的集群信息。

7.在每台机器上敲命令:

cd jar包和Dockerfile的路径

docker build -t test .

如果本机docker上没有java8镜像的话,会去镜像地址docker.io上pull,这个过程非常慢,需要手动修改镜像

vi /etc/docker/daemon.json

按i

输入{"registry-mirrors": ["你的镜像地址"]}

按esc(键盘最右上方)

输入:wq

这时候会在本地docker上 产生一个本地镜像,test,tag为latest

8.在master节点机器上编写一个yml文件,文件名随便,这里取pod,后缀是yml或yaml,文件中的-表示为数组。内容是

apiVersion: apps/v1beta1

kind: Deployment

metadata:

name: nmsl #pod名,自定义

spec:

replicas: 3 #一个镜像生成pod个数,可以用做负载均衡

template:

metadata:

labels:

app: test #pod标签,用于service识别不同的pod

spec:

containers:

- image: test:latest #容器使用的镜像,如果是本地镜像保证每台机器上都要有

name: test

#拉取策略,默认Aways远程拉取,Never只从本地拉取,IfNotPresent优先本地拉取,没有就远程

imagePullPolicy: IfNotPresent

ports:

- containerPort: 8080 #容器的端口

protocol: TCP

一定要注意使用本地镜像,那么集群内每台机器都要有这个镜像。

9.在master节点上敲命令

kubectl create -f pod.yml

生成3个pod,通过命令

kubectl get pod -o wide

查看具体的pod信息

k8s为每个pod生成一个虚拟ip用来内部访问,如果status不是running代表fail了,通过

kubectl describe pod nmsl

查看具体的日志,来解决问题。

如果需要删除,则敲命令

kubectl delete -f pod.yml

通过文件来删除pod

10.在master节点机器上编写一个yml文件,文件名随便,这里取service,后缀是yml或yaml,内容是

kind: Service #首字母一定要大写

apiVersion: v1

metadata:

name: test-service #服务名称,注意不要出现大写字母

spec:

#服务类型,默认是ClusterIp集群内部容器访问地址,会生成一个虚拟IP 与pod不在一个网段

#NodePort会在宿主机上映射一个端口,供外部应用访问模式,就是开放端口给外部访问服务

#LoadBalancer使用负载均衡,三者的功能是叠加的,如loadBalancer=clusterIp+NodePort+负载均衡

type: NodePort

selector:

app: test #对应pod.yml内的标签名

ports:

- protocol: TCP

nodePort: 31111 #集群开放的端口,端口号应该>=30000

port: 6666 #service内部之间互访的端口

targetPort: 8080 #docker容器本身开放的端口

11.在master节点上敲命令

kubectl apply -f service.yml

生成service,敲命令

kubectl describe svc test-service

查看指定service的状态,敲命令

kubectl get service -o wide

获取所有service的具体信息。

deployment(pod)和service都有自己的命名空间namespace,通过

kubectl get namespace

查看所有的命名空间,通过

kubectl get service --namespace=default

查看default内的service,通过

kubectl get deployment --namespace=default

查看default内pod,如果在创建service时未指定namespace,则默认是default命名空间内

metadata

name: pod或service名

namespace: 指定namespace

在pod.yml和service.yml文件通过以上的修改就可以指定命名空间 了,如把所有开放的服务放在一个命名空间里。

需要注意的是pod与对应的service应该放在一个命名空间内。

现在你可以通过浏览器来访问集群内test服务了

http://集群任意节点ip:31111/test/xxx

一个简单的架构图,方便理解

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐