k8s小项目一

一、项目介绍

dd

​ 如图所示:1、tomcat-app如果想要被集群内部访问,通过8080端口访问

​ 2、如果被外网访问,需要servcie进行转发才行(网络组件中ipvs/iptables的规则),也可以端口转发,svc通过spec.selector找到匹配的pod,也就是 app1,,本项目中app1被svc使用80转发到容器8080端口

​ 3、,而app1在svc中访问的方式为node ip+端口,在每个node中都可以这种方式访问;

​ 4.本项目中app1的访问请求来自 nginx pod的转发

​ 5.nginx的访问请求,来自haproxy的转发

​ 正确的访问顺序为54321

k8s-data目录结构

   容器分层 
.
├── dockerfile  
│   ├── system  (系统基础镜像)
│   │   ├── alpine
│   │   ├── centos(我们选择centos系统作为地层基础镜像)
│   │   ├── redhat
│   |	└── ubuntu
|	|
│   └── web  (业务基础镜像)
│       ├── apache
│       └── linux37
|               ├──  nginx
|               ├── jdk-8u-212
|               ├── tomcat-8.5.45-base
|               ├── tomcat-app1
|       	    └── tomcat-app2
│       
|
└── yaml  (k8业务)
    ├── namespaces
    │   └── linux37.yml
    └── web
        └── linux37
  
  
 k8部署业务资源yaml 分层
. 

|─ yaml
        ├── namespaces
        │   └── linux37.yml
        └── web
            └── linux37
                ├── nginx
                │   └── nginx.yaml
                ├── tomcat-app1
                │   └── tomcat-app1.yaml
                └── tomcat-app2
                    └── tomcat-app2.yaml

二、docker分层基础镜像搭建

1.centos基础镜像构建

​ Dockerfile:

FROM harbor.magedu.net/baseimages/centos:7.6.1810


MAINTAINER Jack.Zhang  2973707860@qq.com
ADD filebeat-6.8.3-x86_64.rpm /tmp
RUN yum install -y /tmp/filebeat-6.8.3-x86_64.rpm  vim wget tree  lrzsz gcc gcc-c++ automake pcre pcre-devel zlib zlib-devel openssl openss
l-devel iproute net-tools iotop &&  rm -rf /etc/localtime /tmp/filebeat-6.8.3-x86_64.rpm  && ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc
/localtime && useradd  nginx -u 2019 && useradd www -u 2020

​ build-command.sh

#!/bin/bash
#docker build -t  linux37-centos-base:7.6.1810 .

docker build -t   harbor.magedu.net/baseimages/linux37-centos-base:7.6.1810 .
docker push  harbor.magedu.net/baseimages/linux37-centos-base:7.6.1810 

2.jdk构建基础镜像

​ Dockerfile

FROM  harbor.magedu.net/baseimages/linux37-centos-base:7.6.1810

maintainer zhangshijie 2973707860@qq.com

ADD jdk-8u212-linux-x64.tar.gz /usr/local/src/
RUN ln -sv /usr/local/src/jdk1.8.0_212 /usr/local/jdk
ADD profile /etc/profile

ENV JAVA_HOME /usr/local/jdk
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/:$JRE_HOME/lib/
ENV PATH $PATH:$JAVA_HOME/bin

​ build-command.sh

#!/bin/bash
docker build -t  harbor.magedu.net/baseimages/linux37-centos7.6-jdk:8u212 .

docker push  harbor.magedu.net/baseimages/linux37-centos7.6-jdk:8u212

​ profile中jdk环境变量设置

export JAVA_HOME=/usr/local/jdk
export TOMCAT_HOME=/apps/tomcat
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$TOMCAT_HOME/bin:$PATH
export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

3.tomcat 构建基础镜像

​ Dockerfile

FROM harbor.magedu.net/baseimages/linux37-centos7.6-jdk:8u212


#env
ENV TZ "Asia/Shanghai"
ENV LANG en_US.UTF-8
ENV TERM xterm
ENV TOMCAT_MAJOR_VERSION 8
ENV TOMCAT_MINOR_VERSION 8.5.45
ENV CATALINA_HOME /apps/tomcat
ENV APP_DIR ${CATALINA_HOME}/webapps


ADD apache-tomcat-8.5.45.tar.gz /apps
RUN ln -sv /apps/apache-tomcat-8.5.45 /apps/tomcat

​ build-command.sh

 #!/bin/bash
docker build -t  harbor.magedu.net/linux37/linux37-centos7.6-tomcat:8.5.45 .
docker push harbor.magedu.net/linux37/linux37-centos7.6-tomcat:8.5.45

三、业务镜像构建

1.nginx构建业务镜像

​ Dockerfile

# Nginx image 

#
FROM harbor.magedu.net/baseimages/linux37-centos-base:7.6.1810  
MAINTAINER Jack.Zhang  2973707860@qq.com

ADD nginx-1.16.1.tar.gz  /usr/local/src
RUN  cd /usr/local/src/nginx-1.16.1 && ./configure --prefix=/apps/nginx && make && make install && ln -sv /apps/nginx/sbin/nginx /usr/bin/
RUN  mkdir /data/nginx/html/linux37 -pv 

ADD nginx.conf /apps/nginx/conf/nginx.conf
ADD app.tar.gz /data/nginx/html/linux37

RUN chown www.www -R  /data/nginx/ /apps/nginx

EXPOSE 80 443

CMD ["nginx"]

​ build-command.sh

#!/bin/bash
TAG=$1
docker build -t harbor.magedu.net/linux37/nginx:${TAG} .

docker push    harbor.magedu.net/linux37/nginx:${TAG}

​ nginx.conf

user  www;
worker_processes  auto;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;
daemon off;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

      upstream  tomcat_webserver {
                server linux37-tomcat-app1-service.linux37.svc.linux37.local:80;
                server linux37-tomcat-app2-service.linux37.svc.linux37.local:80;
     }


    server {
          index index.html;
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;


        location / {
            root   html;
            index  index.html index.htm;
        }

        location /linux37 {
         root /data/nginx/html;
          index index.html;
        }

        location /app {
        	proxy_pass http://tomcat_webserver;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
		proxy_set_header X-Real-IP $remote_addr;
        }

       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

       
      
    }
   

}

2. tomact-app1业务镜像构建

​ Dockerfile

FROM harbor.magedu.net/linux37/linux37-centos7.6-tomcat:8.5.45


maintainer zhangshijie "2973707860@qq.com"

ADD app.tar.gz /data/tomcat/webapps
ADD run_tomcat.sh /apps/tomcat/bin/run_tomcat.sh
ADD server.xml /apps/tomcat/conf/server.xml
ADD catalina.sh  /apps/tomcat/bin/catalina.sh
RUN chown www.www /apps/tomcat /data/tomcat /apps/apache-tomcat-8.5.45 -R
EXPOSE 8080 8443

CMD ["/apps/tomcat/bin/run_tomcat.sh"] 

​ build-command.sh

#!/bin/bash
docker build -t harbor.magedu.net/linux37/linux37-tomcat:app1 .
docker push  harbor.magedu.net/linux37/linux37-tomcat:app1

3. tomact-app2业务镜像构建

​ 把app1改掉几个参数即可

四、k8部署资源yaml文件

1.ns的创建

​ root@k8s-master1:/opt/k8s-data/yaml# cat namespaces/linux37.yml

apiVersion: v1
kind: Namespace
metadata:
  name: linux37

2.tomcat-app1的部署

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: linux37-tomcat-app1-deployment-label
  name: linux37-tomcat-app1-deployment
  namespace: linux37
spec:
  replicas: 1
  selector:
    matchLabels:
      app: linux37-tomcat-app1-selector
  template:
    metadata:
      labels:
        app: linux37-tomcat-app1-selector
    spec:
      containers:
      - name: linux37-tomcat-app1-container
        image: harbor.magedu.net/linux37/linux37-tomcat:app1 
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]
        #imagePullPolicy: IfNotPresent
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
          protocol: TCP
          name: http
        env:
        - name: "password"
          value: "123456"
        - name: "age"
          value: "18"
        resources:
          limits:
            cpu: 2
            memory: "2048Mi"
          requests:
            cpu: 0.5
            memory: "1024Mi"
        volumeMounts:
        - name: linux37-images
          mountPath: /data/nginx/html/linux37/images
          readOnly: false
        - name: linux37-static
          mountPath: /data/nginx/html/linux37/static
          readOnly: false
      volumes:
      - name: linux37-images
        nfs:
          server: 192.168.5.109
          path: /data/linux37/images
      - name: linux37-static
        nfs:
          server: 192.168.5.109
          path: /data/linux37/static
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: linux37-tomcat-app1-service-label
  name: linux37-tomcat-app1-service
  namespace: linux37
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 8080
    nodePort: 30002
  selector:
    app: linux37-tomcat-app1-selector

​ app2修改一下即可

3. nginx的部署

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: linux37-nginx-deployment-label
  name: linux37-nginx-deployment
  namespace: linux37
spec:
  replicas: 1
  selector:
    matchLabels:
      app: linux37-nginx-selector
  template:
    metadata:
      labels:
        app: linux37-nginx-selector
    spec:
      containers:
      - name: linux37-nginx-container
        image: harbor.magedu.net/linux37/nginx:v3
        #command: ["/apps/tomcat/bin/run_tomcat.sh"]
        #imagePullPolicy: IfNotPresent
        imagePullPolicy: Always
        ports:
        - containerPort: 80
          protocol: TCP
          name: http
        env:
        - name: "password"
          value: "123456"
        - name: "age"
          value: "18"
        resources:
          limits:
            cpu: 2
            memory: "2048Mi"
          requests:
            cpu: 0.5
            memory: "1024Mi"
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: linux37-nginx-service-label
  name: linux37-nginx-service
  namespace: linux37
spec:
  type: NodePort
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
    nodePort: 30007
  selector:
    app: linux37-nginx-selector

六、其他

​ 1.访问不在同一个ns中的资源加“.ns”即可

root@k8s-master1:/opt/k8s-data/yaml/web/linux37/tomcat-app2# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
busybox                             1/1     Running   14         7d3h
net-test3-6b88985b87-ldll2          1/1     Running   8          13d
net-test3-6b88985b87-zbrxl          1/1     Running   6          13d
nginx-deployment-86f8db9c96-sksjr   1/1     Running   2          11d

root@k8s-master1:/opt/k8s-data/yaml/web/linux37/tomcat-app2# kubectl  get service -n linux37
NAME                          TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
linux37-tomcat-app1-service   NodePort   10.20.232.218   <none>        80:30002/TCP   22m
linux37-tomcat-app2-service   NodePort   10.20.212.179   <none>        80:30003/TCP   6m16s


root@k8s-master1:/opt/k8s-data/yaml/web/linux37/tomcat-app2# kubectl  exec busybox nslookup  linux37-tomcat-app1-service
nslookup: can't resolve 'linux37-tomcat-app1-service'
Server:    10.20.254.254
Address 1: 10.20.254.254 kube-dns.kube-system.svc.linux37.local

command terminated with exit code 1



root@k8s-master1:/opt/k8s-data/yaml/web/linux37/tomcat-app2# kubectl  exec busybox nslookup  linux37-tomcat-app1-service.linux37
Server:    10.20.254.254
Address 1: 10.20.254.254 kube-dns.kube-system.svc.linux37.local

Name:      linux37-tomcat-app1-service.linux37
Address 1: 10.20.232.218 linux37-tomcat-app1-service.linux37.svc.linux37.local

2.容器分层搭建好之后一定要先测试,访问没有问题再在k8中运行

docker run -it --rm -p 80:80 harbor.magedu.net/linux37/nginx:v1

http://192.168.5.101/linux37/app/1.jpg

3.打包文件一定要进入到该目录下,这样解压的文件才不会有目录名

4.haproxy的配置

listen linux37-nginx-80
  bind 192.168.5.248:80
  mode tcp
  server 192.168.5.101 192.168.5.101:30004 check fall 3 rise 3 inter 3s
  server 192.168.5.102 192.168.5.102:30004 check fall 3 rise 3 inter 3s

"/etc/haproxy/haproxy.cfg" 49L, 1685C written                                                                        
root@k8s-ha1:~# systemctl restart haproxy

5.测试连接

​ http://192.168.5.101:8081/app/ 基础容器镜像测试

​ http://192.168.5.111:30002/app/ k8 没有使用ningx转发时候的测试

​ http://192.168.5.248/linux37/ 最终结果测试,rr轮询

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于部署一个基于 Vue.js 的项目到 Kubernetes(k8s)集群,你可以按照以下步骤进行操作: 1. 构建 Vue 项目:在本地开发环境中使用 `npm run build` 或者 `yarn build` 命令构建你的 Vue 项目。这将会生成一个 dist 目录,其中包含了编译后的静态文件。 2. 创建 Docker 镜像:使用 Docker 将你的 Vue 项目打包成一个容器镜像。为此,你需要编写一个 Dockerfile 文件,并在其中设置基础镜像、拷贝静态文件等操作。 3. 构建镜像:运行 `docker build` 命令来构建 Docker 镜像。例如:`docker build -t your-docker-image:tag .` 这将会在当前目录下构建一个名为 your-docker-image 的镜像,并设置一个标签。 4. 推送镜像:将构建好的镜像推送到一个容器镜像仓库(如 Docker Hub、阿里云容器镜像服务等)。执行 `docker push your-docker-image:tag` 命令将镜像推送到远程仓库。 5. 创建 Kubernetes 配置文件:创建一个 Kubernetes 的配置文件(如 Deployment 和 Service),用于描述你的应用程序的部署和服务暴露方式。在配置文件中设置容器镜像地址等参数。 6. 部署到 Kubernetes:使用 `kubectl apply -f your-config-file.yaml` 命令将配置文件中定义的资源部署到 Kubernetes 集群中。 7. 监视部署状态:使用 `kubectl get pods` 命令来查看部署的 Pod 状态,确保你的应用程序正常运行。 8. 访问应用程序:根据你的配置文件中定义的 Service 类型(如 NodePort、LoadBalancer),通过对应的方式来访问你的应用程序。 这些步骤可以帮助你将 Vue 项目成功部署到 Kubernetes 集群中。注意,这里只提供了一个基本的流程,具体的步骤可能会因为你的实际需求和环境而有所变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值