安装环境

  • 操作系统:centos7
  • docker:1.13.1
  • k8s: 1.5.2(单节点)
  • 如果没有安装docker和k8s的参照我前一篇博客安装安装k8s踩的一些坑

部署安装步骤

1、先在docker里面安装redis、pgsql、zookeeper、
 1.1  docker search imageName //搜索镜像 选择合适版本然后
 1.2  docker pull imageName //拉下镜像
 1.3  docker images //查看自己的镜像仓库是否有
 1.4  docker运行zookeeper、redis、pgsql安装:
     docker run -d docker.io/redis  --name myredis -p 6379:6379 redis --requirepass "123456"
     docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d docker.io/borgius/pgsql 
     docker run --privileged=true -d --name zookeeper1 --publish 2181:2181  -d docker.io/zookeeper
2、将自己的服务打成镜像、(此处有2个服务、server、web服务)

2.1 创建Dockerfile文件、文件内容如下、(此处为了方便,很多地方简写:如果是部署在
生产环境上,需要修改下日志目录,以及启动方式) server dockerfile文件内容

FROM java:8
VOLUME /tmp    
COPY resources/* resources/ 
ADD  service-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

2.2 执行docker build -t 镜像名字 . 命令进行构建镜像、成功后使用docker images
查看自己的镜像是否生成(注意镜像名字后面有个空格和一个点. 表示当前目录下)、
如果镜像没有生成需要重新执行构建,排查问题
2.3 创建web docker镜像:同上 Dockerfile 文件内容如下:

 FROM java:8
VOLUME /tmp    
COPY resources/* resources/ 
ADD  web-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"] 
3、将server项目,和web项目部署到k8s里面、使用环境变量连接外面数据源

3.1 执行命令 kubectl get node 查看节点是否正常(单节点如下:)

  NAME        STATUS    AGE
  127.0.0.1   Ready     6d

3.2 创建server、web项目的yaml文件、文件内容如下:

  注意:  对于文件开头apiVersion版本:内容与k8s版本相关:
  1.6版本之前 apiVsersion:extensions/v1beta1
  1.6版本到1.9版本之间:apps/v1beta1
  1.9版本之后:apps/v1
  具体详情可参考:

k8s的apiversion版本
server.yaml 文件内容:

 apiVersion: extensions/v1beta1
 kind: Deployment
 metadata:
      name: server
      labels:
      app: server
 spec:
     replicas: 1
     selector:
     matchLabels:
     app: server
template:
metadata:
  labels:
    app: server
spec:
  containers:
  - name: server
    image: server //镜像名字
    imagePullPolicy: Never  //表示从本地docker镜像中获取镜像
    ports:
    - containerPort: 8087  //端口
    env:    //配置的环境变量
      - name:  ZOOKEEPER_HOST  //zookeeper ip地址
        value: '10.62.155.12'
      - name:  ZOOKEEPER_PORT //zookeeper 端口
        value:  '2181'
      - name:  REDIS_HOST   //redis
        value: '10.62.155.12'
      - name:  REDIS_PASSWORD  //密码
        value: "123456"
      - name: PGSQL_SERVICE_HOST 
        value:  '10.62.55.12'
      - name: PGSQL_SERVICE_PORT
        value: "5432"
      - name:  PGSQL_PASSWORD
        value: "123456"
      - name:  PGSQL_USERNAME
        value: "postgres"

server-svc.yaml文件内容如下:

apiVersion: v1
kind: Service
metadata:
   name: yty-server
   namespace: default
labels:
app: server
spec:
  type: NodePort
  ports:
  - port: 8087
	 nodePort: 30001  //映射到外部机器端口、默认范围:30000-65535 可修改
  selector:
	 app: server

web.yaml文件内容:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: web
  labels:
    app: web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
      - name: web
        image: web
        imagePullPolicy: Never
        ports:
        - containerPort: 80
        env:
          - name:  ZOOKEEPER_HOST
            value: '10.62.155.12'
          - name:  ZOOKEEPER_PORT
            value:  '2181'

web-svc.yaml 文件内容如下:

apiVersion: v1
kind: Service
metadata:
  name: web
  namespace: default
  labels:
    app: web
spec:
  type: NodePort
  ports:
  - port: 80
    nodePort: 30003
  selector:
    app: web

3.3、创建k8s pod服务

1、 执行命令:kubectl create server.yaml
          kubectl create server-svc.yaml
          kubectl create web.yaml
          kubectl create web-svc.yaml
          如果文件单独分开放:比如server.yaml 文件和server-svc文件单独放在一起,
          可使用kubectl apply -f . 命令创建,注意后面有个. 表示当前目录下:
           当更新yaml文件内容时,也可以用kubectl apply -f .来更新Pod
  
2、  执行完创建命令后:执行kubectl get pods 查看pod情况
NAME                          READY     STATUS    RESTARTS   AGE
server-1069855030-kshsf   1/1       Running   0          2d
web-3657954026-vf309      1/1       Running   0          2d
查看 pod项目日志情况:  kubectl logs -f  server-1069855030-kshsf(pod名字)
3、如上:如果status 状态为running 则启动正常。 然后在浏览器输入id+映射端口 + 
项目即可访问
4、一些相关k8s命令
     kubectl logs -f  server-1069855030-kshsf(pod名字)
    kubectl delete pod podName //删除pod 删除Pod的时候还必须删除
                              // deployment 否则还会自动创建
    kubectl get  deployment //查看 deployment  情况
    kubectl delete  deployment   deploymentName//删除 deployment 
    kubectl describe pod server-1069855030-kshsf 查看pod情况
    kubectl delete pod web-3657954026-j6tpq  -n default --force --grace-period=0 //如果无法删除pod,
    可使用此强制删除命令; 慎用
5 备注
  对于使用环境变量中的ip地址:必须在k8s集群机器地址和外部机器地址在同一个局域网中可访问。
  如果使用域名方式,必须搭建k8s集群dns解析才能使用
Logo

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

更多推荐