Operación de implementación del día 05 (actualización continua, reducción y expansión)

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

imagen-20201209223045133

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

imagen-20201209224128176

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

imagen-20201209225746865

3.4 Construya una segunda imagen como arriba y verifique

imagen-20201209230118449

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 

imagen-20201210230940417

Modificar a tres nodos, guardar y salir

imagen-20201210231013164

He visto el resultado y la dirección ha cambiado.

imagen-20201210231156172

Tres, actualización continua

kubectl edit deployments.apps test-django 

imagen-20201210231433240

Guardar, salir y volver a implementar

kubectl apply -f svc.yaml
----------------------------------------------------------------

imagen-20201210232030002

Cuarto, elimine la implementación

Debido al mecanismo de implementación, solo podemos usar un mecanismo de reducción para salir

Supongo que te gusta

Origin blog.csdn.net/A1L__/article/details/111026186
Recomendado
Clasificación