Day05 deployment operation (rolling update, shrinking and expanding)

Day05 deployment operation (rolling update, shrinking and expanding)

One, rolling update

1. Preparations (mirror production)

The following preparatory work is to make two different versions of the mirror, students who don’t want to do it can pull the mirror I made directly without doing it

registry.cn-hangzhou.aliyuncs.com/k8s2me/django:v1

registry.cn-hangzhou.aliyuncs.com/k8s2me/django:v2

1.1 Create a Django project

Modify setting configuration
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'),
#     }
# }
Write a view
def index(request):
    hostname = socket.gethostname()
    return JsonResponse(f'主机名:{hostname}, 版本:V1', safe=False, json_dumps_params={
    
    'ensure_ascii': False})    
# 编码和显示
Configure routing
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
]
Check ok

image-20201209223045133

2. Copy one as version two

def index(request):
    hostname = socket.gethostname()
    return JsonResponse(f'主机名:{hostname}, 版本:V2', safe=False, json_dumps_params={
    
    'ensure_ascii': False})   

3. Make a mirror image and upload it to the warehouse

3.1 upload to linux

image-20201209224128176

3.2 Writing 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 build image

docker build -t django01:v1 .  # 打开当前目录下的Dockerfield 构建django01:v1镜像

3.4 Run and access

[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

image-20201209225746865

3.4 Build a second image as above and verify

image-20201209230118449

Two, dynamic expansion

2.1 Write the controller

# 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 Deploy and view

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 Monitoring and expansion

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"

Expansion

kubectl edit deployments.apps test-django 

image-20201210230940417

Modify to three nodes, save and exit

image-20201210231013164

I have seen the result and the address has changed

image-20201210231156172

Three, rolling update

kubectl edit deployments.apps test-django 

image-20201210231433240

Save and exit, and redeploy

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

image-20201210232030002

Fourth, delete deployment

Due to the deployment mechanism, we can only use a shrinking mechanism to exit

Guess you like

Origin blog.csdn.net/A1L__/article/details/111026186