k8s1.28.0集群发布一个django4.2.8应用

摘要

1、使用ubuntu:20.04创建一个基础的django服务
2、将第一步的容器打包发布到node节点
3、创建deployment和service的yaml配置

创建一个django的服务基于docker

(这里是在kmaster1上执行的,有docker本地hub的可以在将镜像放进去)

## 拉取基础镜像
root@kmaster1:~/application/python# docker pull ubuntu:20.04

## 开启容器并进入交互端
root@kmaster1:~/application/python# docker run -it ubuntu:20.04

## 安装pip3和django4.2.8
root@a2bc0121d174:/# apt update
root@a2bc0121d174:/# apt install python3-pip vim -y
root@a2bc0121d174:/# pip3 install django==4.2.8

## 创建项目目录以及初始化django服务
root@a2bc0121d174:/# mkdir /app
root@a2bc0121d174:/# cd /app
root@a2bc0121d174:/app/# django-admin startproject MyFirstProject
root@a2bc0121d174:/app/# cd MyFirstProject/
root@a2bc0121d174:/app/MyFirstProject# ls
MyFirstProject  manage.py
root@a2bc0121d174:/app/MyFirstProject# python3 manage.py startapp myapp
root@a2bc0121d174:/app/MyFirstProject# cd MyFirstProject
root@a2bc0121d174:/app/MyFirstProject/MyFirstProject# ls
__init__.py  __pycache__  asgi.py  settings.py  urls.py  wsgi.py

## 修改django项目配置文件
root@a2bc0121d174:/app/MyFirstProject/MyFirstProject# vim settings.py
...
ALLOWED_HOSTS = ['*']   #修改*表示允许所有主机访问
...
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',    #增加自己建的应用名称
]


...
LANGUAGE_CODE = 'zh-hans'  #设置中文

TIME_ZONE = 'Asia/Shanghai'  #设置时区为亚洲上海


## 安装时间文件纠正时区和时间
root@a2bc0121d174:/app/MyFirstProject/MyFirstProject# apt install tzdata -y
root@a2bc0121d174:/app/MyFirstProject/MyFirstProject# tzselect 
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa							     7) Europe
2) Americas							     8) Indian Ocean
3) Antarctica							     9) Pacific Ocean
4) Asia								    10) coord - I want to use geographical coordinates.
5) Atlantic Ocean						    11) TZ - I want to specify the timezone using the Posix TZ format.
6) Australia
#? 4
Please select a country whose clocks agree with yours.
 1) Afghanistan		     11) Christmas Island	  21) Iraq		       31) Lebanon		    41) Qatar			 51) Thailand
 2) Antarctica		     12) Cocos (Keeling) Islands  22) Israel		       32) Macau		    42) R?union			 52) Turkmenistan
 3) Armenia		     13) Cyprus			  23) Japan		       33) Malaysia		    43) Russia			 53) United Arab Emirates
 4) Azerbaijan		     14) East Timor		  24) Jordan		       34) Mongolia		    44) Saudi Arabia		 54) Uzbekistan
 5) Bahrain		     15) French S. Terr.	  25) Kazakhstan	       35) Myanmar (Burma)	    45) Seychelles		 55) Vietnam
 6) Bangladesh		     16) Georgia		  26) Korea (North)	       36) Nepal		    46) Singapore		 56) Yemen
 7) Bhutan		     17) Hong Kong		  27) Korea (South)	       37) Oman			    47) Sri Lanka
 8) Brunei		     18) India			  28) Kuwait		       38) Pakistan		    48) Syria
 9) Cambodia		     19) Indonesia		  29) Kyrgyzstan	       39) Palestine		    49) Taiwan
10) China		     20) Iran			  30) Laos		       40) Philippines		    50) Tajikistan
#? 10
Please select one of the following timezones.
1) Beijing Time
2) Xinjiang Time
#? 1

The following information has been given:

	China
	Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Selected time is now:	Mon Feb 12 22:09:21 CST 2024.
Universal Time is now:	Mon Feb 12 14:09:21 UTC 2024.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
	TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
root@a2bc0121d174:/app/MyFirstProject/MyFirstProject# rm -rf /etc/localtime 
root@a2bc0121d174:/app/MyFirstProject/MyFirstProject# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
root@a2bc0121d174:/app/MyFirstProject/MyFirstProject# date
Mon Feb 12 22:10:27 CST 2024


root@a2bc0121d174:/app/MyFirstProject/MyFirstProject# exit

打包容器为新镜像

# 退出a2bc0121d174容器并保存镜像为django:myfirstapp
root@kmaster1:~/application/python# docker commit a2bc0121d174 django:myfirstapp
root@kmaster1:~/application/python# docker images
REPOSITORY                                                                    TAG          IMAGE ID       CREATED         SIZE
django                                                                        myfirstapp   22d625b4f294   3 minutes ago   546MB

基于dockerfile创建django的后台应用容器

#创建在kmaster1上的应用命令
mkdir /root/application/python
cd /root/application/python


#编写dockerfile
vim Dockerfile
FROM django:myfirstapp
WORKDIR /app/MyFirstProject
CMD ["python3", "manage.py", "runserver", "0.0.0.0:8000"]
EXPOSE 8000



#编译新的应用镜像
root@kmaster1:~/application/python# docker build -t myapp:v1 .
[+] Building 0.6s (6/6) FINISHED                                                                                                                                                 docker:default
 => [internal] load build definition from Dockerfile                                                                                                                                       0.0s
 => => transferring dockerfile: 693B                                                                                                                                                       0.0s
 => [internal] load .dockerignore                                                                                                                                                          0.1s
 => => transferring context: 2B                                                                                                                                                            0.0s
 => [internal] load metadata for docker.io/library/django:myfirstapp                                                                                                                       0.0s
 => [1/2] FROM docker.io/library/django:myfirstapp                                                                                                                                         0.0s
 => [2/2] WORKDIR /app/MyFirstProject/                                                                                                                                                     0.1s
 => exporting to image                                                                                                                                                                     0.1s
 => => exporting layers                                                                                                                                                                    0.1s
 => => writing image sha256:9e814098e6188b9af6f4ad2134f0b190b23082bc202a05e42a0ba2155579c554                                                                                               0.0s
 => => naming to docker.io/library/myapp:v1                                                                                                                                                0.0s
root@kmaster1:~/application/python# docker images
REPOSITORY                                                                    TAG          IMAGE ID       CREATED          SIZE
myapp                                                                         v1           9e814098e618   55 seconds ago   546MB


#打包新应用为tar包
cd /root/application/python
docker save -o myapp_v1.tar myapp:v1

将新应用镜像传到node节点(使用本地hub的可以忽略此步骤)

# 在kmaster1上scp将myapp_V1.tar传到node节点,在有本地hub的情况下,可以自定义此步骤
scp myapp_v1.tar knode1:/root/
scp myapp_v1.tar knode2:/root/
scp myapp_v1.tar knode3:/root/
scp myapp_v1.tar knode4:/root/


# 分别到knode1,knode2,knode3,knode4上执行
docker load -i myapp_v1.tar

创建deployment-service-django.yaml

cd /root/application/python
vim deployment-service-django.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev   #创建一个dev的namespace
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-django
  namespace: dev  #创建pod放到dev中
spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 2
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:v1
        ports:
        - containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
  name: service-django
  labels:
    app: myapp
  namespace: dev
spec:
  type: NodePort
  ports:
  - port: 8000
    targetPort: 8000
    nodePort: 32424
  selector:
    app: myapp

执行deployment-service-django.yaml

root@kmaster1:~/application/python# kubectl apply -f deployment-service-django.yaml 
namespace/dev created
deployment.apps/deployment-django created
service/service-django created
root@kmaster1:~/application/python# kubectl get pods -n dev 
NAME                                 READY   STATUS    RESTARTS   AGE
deployment-django-7dc469fd5b-bsn9m   1/1     Running   0          12s
deployment-django-7dc469fd5b-zn5zs   1/1     Running   0          12s
root@kmaster1:~/application/python# kubectl get svc -n dev 
NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service-django   NodePort   10.98.126.238   <none>        8000:32424/TCP   20s

访问django应用服务

http://192.168.48.210:32424

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章介绍docker的前世今生,了 解docker的实现原理,以Django项目为例,教大家如何编写最佳的Dockerfile实现构业务镜像的制作。通过本章的学习,大家会知道docker的概念及基本操作,并学会构建自己的业务镜像,并通过抓包的方式掌握Docker最常用的bridge网络模式的通信。第二章本章学习kubernetes的架构及工作流程,重点介绍如本章学习kubernetes的架构及工作流程,重点介绍如断的滚动更新,通过服务发现来实现集群内部的服务间访问,并通过ingress- -nginx实现外部使用域名访问集群内部的服务。同时介绍基于EFK如何搭建Kubernetes集群的日志收集系统。学完本章,我们的Django demo项目已经可以运行在k8s集群中,同时我们可以使用域名进行服务的访问。第三章本章基于k8s集群部署gitlab、sonarQube、 Jenkins等工具,并把上述工具集成到Jenkins中,以Django项目为例,通过多分支流水线及Jenkinsfle实现项目代码提交到不同的仓库分支,实现自动代码扫描、单元测试、docker容器构建、k8s服务的自动部署。第四章由于公司内部项目众多,大量的项目使用同一套流程做CICD,那么势必会存在大量的重复代码,因此本章主要通过使用groovy实现Jenkins的sharedL ibrary的开发,以提取项目在CICD实践过程中的公共逻辑,提供一系列的流程的接口供公司内各项目调用,开发完成后,还是以Django的demo项目为例,进行Jenkinsfle的改造,最后仅需通过简单的Jenkinsfle的配置,即可优雅的完成CICD流程的整个过程,此方式已在大型企业内部落地应用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值