Devops-day5-Jenkins部署Python+Golang

文章目录

Jenkins部署Python+Golang

Python

编译环境(python)

部署环境

一、部署环境

1、设计

user  ---> ingress  ---> endprints  ---> pod
# 因为endpoints上面有ingress,所以在写配置清单时要用无头service

# ingress
URL: www.django.cluster.local.com

# endPrints
service ---> 8080

# Pod
django:2+

## 构建镜像 :python:3.6.13

2.准备代码

1)克隆仓库

  • k8s-master1 部署一个基础环境
  • 克隆并生成,上传至自己的代码仓库
  • 过程中若需要输入密码,则需将ssh公钥添加到gitlab内,否则密码正确也无效!
[root@k8s-master1 ~]# git clone git@gitee.com:chenyang0910/django_test.git
[root@k8s-master1 django_test]# cd django_test/
[root@k8s-master1 django_test]# rm -rf .git/
[root@k8s-master1 django_test]# 
git init
git add .git remote add origin git@192.168.12.82:root/django.git
git remote add origin git@192.168.12.82:root/django.git
git add .
git commit -m 'init' 
git push -u origin master 

# 拷贝代码链接
git@192.168.12.82:root/django.git		# ssh
http://192.168.12.82/root/django.git	# http

2)编写Dockerfile

  • 编写jenkins-python的Dockerfile与启动脚本
1.编写Dockerfile
[root@k8s-master1 django_test]# cat > Doekerfile <<EOf
# 指定基础镜像
FROM python:3.6.13

# 安装django框架
RUN pip3 install django==2.0.7

# 设置需要挂载的目录
VOLUME ['/opt']

# 暴露端口,默认也是8080
EXPOSE 8080

# 设置工作目录
WORKDIR /opt

# 启动命令,监听所有ip的8080端口
CMD ["./start"]
EOF

2.编写启动脚本
[root@k8s-master1 django_test]# cat > start <<EOF
#!/bin/bash
# 安装插件
pip3 install -r requirements.txt

python manage.py runserver 0.0.0.0:8080
EOF
[root@k8s-master1 django_test]# chmod +x start

2)构建镜像

# 构建
[root@k8s-master1 django_test]# docker build -t 18954354671/jenkins-python:py3.6.13-dj2.0.7 .

# 推送
[root@k8s-master1 django_test]# docker push 18954354671/jenkins-python:py3.6.13-dj2.0.7

4)编写配置清单

  • 部署python配置清单
cat > django-python.yaml <<EOF
kind: Namespace
apiVersion: v1
metadata:
  name: python-mysql
---
kind: Service
apiVersion: v1
metadata:
  name: python-mysql-svc
  namespace: python-mysql
spec:
  ports:
    - port: 3306
      targetPort: 3306
  selector:
    app: python-mysql
    deploy: mysql
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: python-mysql
  name: python-mysql-deployment
spec:
  selector:
    matchLabels:
      app: python-mysql
      deploy: mysql
  template:
    metadata:
      labels:
        app: python-mysql
        deploy: mysql
    spec:
      nodeName: k8s-master1
      containers:
        - name: mysql
          image: mysql:5.7
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
            - name: MYSQL_DATABASE
              value: "shuibianba"
---
kind: Namespace
apiVersion: v1
metadata:
  name: python-django
---
kind: Service
apiVersion: v1
metadata:
  name: python-django-svc
  namespace: python-django
spec:
  ports:
    - port: 8080
      targetPort: 8080
  clusterIP: None
  selector:
    app: python-django
    deploy: django
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: python-django
  name: python-django-svc
spec:
  selector:
    matchLabels:
      app: python-django
      deploy: django
  template:
    metadata:
      labels:
        app: python-django
        deploy: django
    spec:
      nodeName: k8s-master1
      containers:
        - name: django
          image: 18954354671/jenkins-python:py3.6.13-dj2.0.7
          command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
          volumeMounts:
            - mountPath: /opt
              name: python-django-nfs
      volumes:
        - name: python-django-nfs
          nfs:
            path: /nfs/v5
            server: 172.16.12.11
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  name: python-django-ingress
  namespace: python-django
spec:
  rules:
    - host: www.django.cluster.local.com
      http:
        paths:
          - backend:
              serviceName: python-django-svc
              servicePort: 8080
            path: /
EOF

二、部署环境

1.部署python

[root@k8s-master1 ~]# kubectl django-python.yaml

[root@k8s-master1 ~]# kubectl get ingress -n python-django 
NAME                    CLASS    HOSTS                          ADDRESS   PORTS   AGE
python-django-ingress   <none>   www.django.cluster.local.com             80      2m33s
[root@k8s-master1 ~]# kubectl get pod -n python-mysql 
NAME                                      READY   STATUS    RESTARTS   AGE
python-mysql-deployment-7f8c9ff55-srgs6   1/1     Running   0          10m

# 查看访问域名
[root@k8s-master1 ~]# kubectl get ingress -n python-django 
NAME                    CLASS    HOSTS                          ADDRESS   PORTS   AGE
python-django-ingress   <none>   www.django.cluster.local.com             80      11m

# 查看访问端口:32145
[root@k8s-master1 ~]# kubectl get svc -n ingress-nginx 
NAME           			  TYPE        CLUSTER-IP    EXTERNAL-IP PORT(S)    AGE
ingress-nginx-controller  NodePort    10.111.205.92    <none>    80:32145/TCP,443:32075/TCP   4d22h

2.访问测试

  • 访问到如下界面即为成功
www.django.cluster.local.com:32145

Devops-day5-Jenkins部署Python+Golang

Golang

编译环境:

1、安装go语言

2、优化测试

部署环境:

1、部署

一、编译环境(Jenkins)

1、安装golang语言

# 下载Golang
wget https://golang.google.cn/dl/go1.16.3.linux-amd64.tar.gz

# 安装
[root@jenkins opt]# tar -xf go1.16.3.linux-amd64.tar.gz -C /usr/local/

# 添加环境变量
[root@jenkins ~]# vim /etc/profile
export GO_HOME=/usr/local/go
export GO_ROOT=/usr/local/go
export GO_PATH=/opt/go
export GOPROXY=https://mirrors.aliyun.com/goproxy/
PATH=$PATH:$GO_HOME:$GO_ROOT:$GO_PATH:$GO_HOME/bin
export PATH

[root@jenkins ~]# vim /etc/profile
[root@jenkins ~]# source /etc/profile
[root@jenkins ~]# printenv | grep GO
GO_PATH=/opt/go
GOPROXY=https://mirrors.aliyun.com/goproxy/
GO_HOME=/usr/local/go
GO_ROOT=/usr/local/go

2、测试

[root@jenkins go]# mkdir /opt/go
[root@jenkins go]# cd /opt/go
[root@jenkins go]# go mod init jenkins-go
[root@jenkins go]# go get -u github.com/gin-gonic/gin
[root@jenkins go]# cat > main.go <<EOF
package main
import "github.com/gin-gonic/gin"
func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run("0.0.0.0:8888") // listen and serve on 0.0.0.0:8080
}
EOF
[root@jenkins go]# go run main.go 
[root@jenkins go]#  curl http://192.168.12.83:8888/ping
{"message":"pong"}

二、部署环境(web)

1.jenkins部署

  • 只需运行构建的二进制文件

Devops-day5-Jenkins部署Python+Golang

Devops-day5-Jenkins部署Python+Golang

2.构建脚本

#!/bin/bash
git checkout $GIT_TAG

export GOPROXY=https://mirrors.aliyun.com/goproxy/
/usr/local/go/bin/go mod init jenkins-go
/usr/local/go/bin/go get -u github.com/gin-gonic/gin

rm -rf target && mkdir target
cd target
/usr/local/go/bin/go build ../main.go

Devops-day5-Jenkins部署Python+Golang

3.构建后脚本

#!/bin/bash
chmod +x /nfs/v9/target/main
kubectl get pods -n golang | awk '{print $1}' | grep -v "NAME" | xargs -I {} kubectl delete pod -n golang {}
/nfs/v9/target/main &>/dev/null &

Devops-day5-Jenkins部署Python+Golang

cat > golang.yaml <<EOF
kind: Namespace
apiVersion: v1
metadata:
  name: golang
---
kind: Deployment
apiVersion: apps/v1
metadata:
  namespace: golang
  name: golang-deployment
spec:
  selector:
    matchLabels:
      app: golang
      deploy: main
  template:
    metadata:
      labels:
        app: golang
        deploy: main
    spec:
      nodeName: k8s-master1
      containers:
        - name: golanbg
          image: centos:7
          command:
            - "/bin/sh"
            - "-c"
            - "/opt/target/main"
          command: [ "/bin/bash", "-ce", "tail -f /dev/null" ]
          livenessProbe:
            exec:
              command:
                - "/bin/bash"
                - "-c"
                - "cat /opt/target/main"
            periodSeconds: 2
          readinessProbe:
            tcpSocket:
              port: 38080
            initialDelaySeconds: 30
            periodSeconds: 2
          volumeMounts:
            - mountPath: /opt
              name: golang-data
      volumes:
        - name: golang-data
          nfs:
            path: /nfs/v6
            server: 172.16.12.11
---
kind: Service
apiVersion: v1
metadata:
  name: golang-deployment-svc
  namespace: golang
spec:
  ports:
    - port: 38080
      targetPort: 38080
  selector:
    app: golang
    deploy: main
  clusterIP: None
---
kind: Ingress
apiVersion: extensions/v1beta1
metadata:
  namespace: golang
  name: golang-ingrees
spec:
  rules:
    - host: www.golang.cluster.local.com
      http:
        paths:
          - backend:
              serviceName: golang-deployment-svc
              servicePort: 38080
            path: /
EOF

4.访问

http://www.golang.cluster.local.com:38080/user/

user/内容随便跟

Devops-day5-Jenkins部署Python+Golang

上一篇:使用rar打包多个文件为exe可执行文件


下一篇:ES6学习笔记六(Iterator和for..of)