ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Day05 deployment操作(滚动更新,缩容扩容)

2020-12-10 23:32:07  阅读:304  来源: 互联网

标签:缩容 middleware Day05 django v1 deployment test 镜像 主机名


Day05 deployment操作(滚动更新,缩容扩容)

一、滚动更新

1.准备工作(镜像制作)

以下准备工作是制作两个版本不同的镜像,不想做的同学可以不做直接拉取我制作好的镜像

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

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

1.1 创建Django项目

修改setting配置
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'),
#     }
# }
写一个view
def index(request):
    hostname = socket.gethostname()
    return JsonResponse(f'主机名:{hostname}, 版本:V1', safe=False, json_dumps_params={'ensure_ascii': False})    
# 编码和显示
配置路由
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
]
检查一下ok

image-20201209223045133

2.复制一个作为版本二

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

3.制作镜像并上传到仓库

3.1上传到linux

image-20201209224128176

3.2编写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构建镜像

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

3.4运行并访问

[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 同上构建第二个镜像,并验证

image-20201209230118449

二、动态扩容

2.1 编写控制器

# 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 部署并查看

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 监测并扩容

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"

扩容

kubectl edit deployments.apps test-django 

image-20201210230940417

修改为三个节点,保存并退出

image-20201210231013164

已经看到结果了,地址也发生了变化

image-20201210231156172

三、滚动更新

kubectl edit deployments.apps test-django 

image-20201210231433240

保存退出,并重新部署

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

image-20201210232030002

四、删除deployment

由于deployment的机制,我们只能采取缩容的机制才能退出

标签:缩容,middleware,Day05,django,v1,deployment,test,镜像,主机名
来源: https://blog.csdn.net/A1L__/article/details/111026186

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有