Operación de implementación del día 05 (actualización continua, reducción y expansión)
Uno, actualización continua
1. Preparaciones (producción de espejos)
El siguiente trabajo preparatorio es hacer dos versiones diferentes del espejo, los estudiantes que no quieran hacerlo pueden simplemente tirar del espejo que hice.
registry.cn-hangzhou.aliyuncs.com/k8s2me/django:v1
registry.cn-hangzhou.aliyuncs.com/k8s2me/django:v2
1.1 Crea un proyecto Django
Modificar la configuración de la configuración
ALLOWED_HOSTS = ['*']
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware', # session 注释掉 不然csrf_token验证
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# 不用数据库 注释掉
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
Escribe una vista
def index(request):
hostname = socket.gethostname()
return JsonResponse(f'主机名:{hostname}, 版本:V1', safe=False, json_dumps_params={
'ensure_ascii': False})
# 编码和显示
Configurar el enrutamiento
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index),
]
Comprobar ok
2. Copie uno como versión dos
def index(request):
hostname = socket.gethostname()
return JsonResponse(f'主机名:{hostname}, 版本:V2', safe=False, json_dumps_params={
'ensure_ascii': False})
3.Haga una imagen reflejada y cárguela en el almacén
3.1 subir a linux
3.2 Escribiendo Dockerfile
FROM python:3.6
RUN pip3 install django==2.2.2 -i https://pypi.douban.com/simple/
ADD DjangoV1 DjangoV1
WORKDIR DjangoV1
CMD ["python3", "manage.py", "runserver", "0.0.0.0:80"]
3.3 construir imagen
docker build -t django01:v1 . # 打开当前目录下的Dockerfield 构建django01:v1镜像
3.4 Ejecutar y acceder
[root@o ~]# docker run -d -p80:80 django01:v1
f2e406cb7a8b96ef7c46cf77f02a320c9a8e8d6c16e96c17c738f6d80a712213
[root@o ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f2e406cb7a8b django01:v1 "/bin/sh -c 'cd Djan…" 3 seconds ago Up 2 seconds 0.0.0.0:80->8000/tcp gracious_darwin
3.4 Construya una segunda imagen como arriba y verifique
Dos, expansión dinámica
2.1 Escribir el controlador
# scv.yaml
# 定义资源类型
kind: Deployment
# 定义api版本号
apiVersion: apps/v1
# 定义基础信息
metadata:
name: test-django
# 定义容器信息
spec:
# 最少运行数量
replicas: 1
# 定义pod模板
template:
metadata:
labels:
app: test-django
env: test
spec:
containers:
# 容器名字
- name: django
# 容器的镜像源
image: registry.cn-hangzhou.aliyuncs.com/k8s2me/django:v1
# 定义选择器
selector:
# 精确匹配
matchLabels:
app: test-django
---
# Service 是 Kubernetes 对外访问的窗口,针对不同的场景,kubernetes 为我们设置了四种 Service 的类型
kind: Service
apiVersion: v1
metadata:
name: my-service
namespace: default
labels:
app: nginx
spec:
# NodePort 是将主机 IP 和端口跟 kubernetes 集群所需要暴露的 IP 和端口进行关联,方便其对外提供服务。内
#部可以通过 ClusterIP 进行访问,外部用户可以通过 NodeIP:NodePort 的方式单独访问每个 Node 上的实例。
type: NodePort
selector:
app: test-django
ports:
- port: 80
# 监听的端口
targetPort: 80
# node暴露给外面的端口
nodePort: 30080
# 上述配置创建一个名称为 "my-service" 的 Service 对象,它会将请求代理到使用 TCP 端口 30080,
# 并且具有标签 "test-django" 的 Pod 上。
# Kubernetes 为该服务分配一个 IP 地址(有时称为 "集群IP"),该 IP 地址由服务代理使用。
2.2 Implementar y ver
kubectl apply -f scv.yaml
kubectl get pod -o wide
----------------------------------------------------------
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
test-django-6d96c9ddf4-hcln4 1/1 Running 0 45m 10.244.3.4 k8s-node-02 <none> <none>
# 这里我们看到已经跑起来一个
# 访问
curl 10.244.3.4
----------------------------------------------------------
[root@k8s-master ~]# curl 10.244.3.4
"主机名:test-django-6d96c9ddf4-hcln4, 版本:V1" # 返回值
2.3 Seguimiento y expansión
while true;do curl 127.0.0.1:30080;echo "";sleep 1;done
----------------------------------------------------------
"主机名:test-django-6d96c9ddf4-hcln4, 版本:V1" # 这里只有一个pod起来 所以只有一个地址
"主机名:test-django-6d96c9ddf4-hcln4, 版本:V1"
"主机名:test-django-6d96c9ddf4-hcln4, 版本:V1"
"主机名:test-django-6d96c9ddf4-hcln4, 版本:V1"
Expansión
kubectl edit deployments.apps test-django
Modificar a tres nodos, guardar y salir
He visto el resultado y la dirección ha cambiado.
Tres, actualización continua
kubectl edit deployments.apps test-django
Guardar, salir y volver a implementar
kubectl apply -f svc.yaml
----------------------------------------------------------------
Cuarto, elimine la implementación
Debido al mecanismo de implementación, solo podemos usar un mecanismo de reducción para salir