百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

K8S实战-构建Django项目-01-初始化(k8s初始化失败)

toyiye 2024-04-04 11:41 19 浏览 0 评论

前言

前面的教程,已经带着大家初步了解了K8S,接下来我们要通过实战,使用K8S去设计和构建常用项目。第一个项目,我选择Django,这是一个非常成熟的Web后台系统,通过Django我们可以构建一个稳健的Web业务。

前段时间去准备教案了,接下来我将会持续更新~~~

由于头条的代码显示惨不忍睹,读者也可去公众号阅读此文章。公众号见一楼评论区~~

准备

K8S

前期需要准备一个K8S环境,在前面的教程,我们已经可以通过自动化脚本搭建。可以参考这边博文

Images

django2.02

Dockerfile

FROM centos7:ssh
MAINTAINER from cgls
RUN yum -y install openssh* tar zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make && \
 mkdir /usr/local/python3 && \
 cd /usr/local/python3 && \
 wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tgz && \
 tar -zxf Python-3.6.4.tgz && \
 cd Python-3.6.4 && \
 ./configure --prefix=/usr/local/python3 && \
 make && make install && \
 cd /usr/bin && \
 mv python python.bk && \
 ln -s /usr/local/python3/bin/python3 /usr/bin/python && \
 sed -i "s/python/python2.7/" /usr/bin/yum && \
 sed -i "s/python/python2.7/" /usr/libexec/urlgrabber-ext-down && \
 sed -i "s/python/python2.7/" /usr/bin/yum-config-manager && \
 cd && \
 python -m pip install --upgrade pip && \
 python -m pip install django==2.0.2 && \
 python -m pip install django-bootstrap3 && \
 python -m pip install pymysql && \
 python -m pip install requests && \
 python -m pip install bs4
CMD ["/usr/sbin/init"]

这里我是在centos7:ssh镜像基础上构建的,这个镜像就是在官方镜像上添加了ssh服务。大家可以自行构建~~

docker build -t centos:django2.02 .

mysql:5.7

Dockerfile

FROM centos7:ssh
MAINTAINER from cgls
RUN yum -y install wget && \
 cd /usr/local/src/ && \
 wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm && \
 rpm -ivh mysql57-community-release-el7-8.noarch.rpm && \
 yum -y install mysql-server && \
 mkdir -p /raiddisk/mysqldata && \
 chown mysql:mysql /raiddisk/mysqldata && \
 /usr/sbin/mysqld --initialize-insecure --datadir=/raiddisk/mysqldata --user=mysql && \
 sed -i 's/datadir=\/var\/lib\/mysql/# datadir=\/var\/lib\/mysql/g' /etc/my.cnf && \
 echo -e "# add\ncharacter-set-server = utf8\ndatadir = /raiddisk/mysqldata\nlower_case_table_names = 1\nexpire_logs_days = 2\ninnodb_buffer_pool_size = 512M\nmax_connections=1500\nmax_connect_errors = 50\nmax_allowed_packet = 64M\ninnodb_file_per_table=1\nkey_buffer_size = 4096M\nsort_buffer_size=64M\nmyisam_sort_buffer_size=64M\nread_buffer_size=2M\ntable_open_cache = 2048\ntmp_table_size = 128M\nmax_heap_table_size = 128M\nread_rnd_buffer_size = 128M\nthread_cache_size = 64\nbulk_insert_buffer_size = 64M\nmyisam_max_sort_file_size = 30G\nmyisam_repair_threads = 1\nquery_cache_size = 64M\nquery_cache_limit = 2M\nthread_stack = 192K\nslow_query_log" >> /etc/my.cnf && \
 systemctl enable mysqld.service
CMD ["/usr/sbin/init"]

create.sh

!/bin/bash
mysql -uroot<<EOF 
alter user 'root'@'localhost' identified by '123qwe'; 
grant all privileges on *.* to 'cgls'@'%' identified by '123qwe'; 
flush privileges; 
exit 
EOF

install.sh

#!/bin/bash
docker build -t centos7:mysql .
sleep 3
docker run -itd --name mysql_create centos7:mysql
docker cp create.sh mysql_create:/root
docker -it exec mysql_create sh create.sh
docker commit mysql_create centos7:mysql5.7
docker rm -f -v mysql_create

sh install.sh

设计

我们的django项目,精简版只需要2个服务,mysql服务、django服务。现在镜像已经准备好了,现在要设计服务。

之前我们学习过健康检查,如果服务不能正常运行,一切都是白搭,所以健康检查是一定要有的。除此之外,我们要考虑获取django工程,在构建django服务时,获取最新的django工程并运行。如果django工程需要正常运行,那么我们还需要mysql服务能够正常运行,mysql服务这次暂不做读写分离,仅仅固定cluster_ip即可。

mysql_deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 labels:
 app: mysql
 name: mysql
spec:
 replicas: 1
 selector:
 matchLabels:
 app: mysql
 template:
 metadata:
 labels:
 app: mysql
 spec: 
 containers:
 - image: mysql
 name: mysql
 imagePullPolicy: IfNotPresent
 env:
 - name: MYSQL_ROOT_PASSWORD
 value: 123qwe
 readinessProbe:
 exec:
 command:
 - /bin/sh
 - "-c"
 - MYSQL_PWD="${MYSQL_ROOT_PASSWORD}"
 - mysql -h 127.0.0.1 -u root -e "SELECT 1"
 initialDelaySeconds: 10
 timeoutSeconds: 1
 successThreshold: 1
 failureThreshold: 3
 periodSeconds: 5

mysql_service.yaml

apiVersion: v1
kind: Service
metadata:
 name: mysql-svc
spec:
 selector:
 run: mysql
 clusterIP: 10.101.1.1
 ports:
 - protocol: TCP
 port: 3306
 targetPort: 3306

django_deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 labels:
 app: django
 name: django
spec:
 replicas: 1
 selector:
 matchLabels:
 app: django
 template:
 metadata:
 labels:
 app: django
 spec:
 containers:
 - image: centos7:django2.02
 name: django
 args:
 - /bin/sh
 - -c
 - cd /root; wget http://172.16.1.150:/healthy.conf; sleep 365d
 readinessProbe:
 exec:
 command:
 - cat
 - /root/healthy.conf
 initialDelaySeconds: 10
 periodSeconds: 5

django_service.yaml

apiVersion: v1
kind: Service
metadata:
 name: django-svc
spec:
 selector:
 run: django
 clusterIP: 10.101.1.2
 ports:
 - protocol: TCP
 port: 8000
 targetPort: 8000
?

启动的时候,需要按照顺序依次执行即可~~

kubectl apply -f mysql_deployment.yaml

kubectl apply -f mysql_service.yaml

kubectl apply -f django_deployment.yaml

kubectl apply -f django_service.yaml

如果嫌麻烦,可以把所有文件整成一个

django_deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 labels:
 app: mysql
 name: mysql
spec:
 replicas: 1
 selector:
 matchLabels:
 app: mysql
 template:
 metadata:
 labels:
 app: mysql
 spec: 
 containers:
 - image: mysql
 name: mysql
 imagePullPolicy: IfNotPresent
 env:
 - name: MYSQL_ROOT_PASSWORD
 value: 123qwe
 readinessProbe:
 exec:
 command:
 - /bin/sh
 - "-c"
 - MYSQL_PWD="${MYSQL_ROOT_PASSWORD}"
 - mysql -h 127.0.0.1 -u root -e "SELECT 1"
 initialDelaySeconds: 10
 timeoutSeconds: 1
 successThreshold: 1
 failureThreshold: 3
 periodSeconds: 5
 
---
?
apiVersion: v1
kind: Service
metadata:
 name: mysql-svc
spec:
 selector:
 run: mysql
 clusterIP: 10.101.1.1
 ports:
 - protocol: TCP
 port: 3306
 targetPort: 3306
 
---
?
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
 labels:
 app: django
 name: django
spec:
 replicas: 1
 selector:
 matchLabels:
 app: django
 template:
 metadata:
 labels:
 app: django
 spec:
 containers:
 - image: centos7:django2.02
 name: django
 args:
 - /bin/sh
 - -c
 - cd /root; wget http://172.16.1.150:/healthy.conf; sleep 365d
 readinessProbe:
 exec:
 command:
 - cat
 - /root/healthy.conf
 initialDelaySeconds: 10
 periodSeconds: 5
 
---
?
apiVersion: v1
kind: Service
metadata:
 name: django-svc
spec:
 selector:
 run: django
 clusterIP: 10.101.1.2
 ports:
 - protocol: TCP
 port: 8000
 targetPort: 8000

最基础的架子已经打好,接下来我们要一般般优化直至可以用于生产环境。

大家可以思考一下,如何在资源创建后立马启动django工程~~~

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码