docker容器部署以及k8s集群管理

helm相关概念

  • Helm
    Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。
  • Tiller
    Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。
  • Chart
    Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。
  • Repoistory
    Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。
  • Release
    使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。

注:需要注意的是:Helm 中提到的 Release 和我们通常概念中的版本有所不同,这里的 Release 可以理解为 Helm 使用 Chart 包部署的一个应用实例。

常用的linux命令

文件或者文件夹

将某一个文件从当前虚拟机拷贝到目的虚拟机中的某个目录下 一般为tmp目录

scp ./slwcssportal.tar kylin@10.10.133.203:/tmp/ 

文件复制

cp [-adfilprsu] 源文件(source) 目标文件(destination)

参数:
-a:是指archive的意思,也说是指复制所有的目录
-d:若源文件为连接文件(link file),则复制连接文件属性而非文件本身
-f:强制(force),若有重复或其它疑问时,不会询问用户,而强制复制
-i:若目标文件(destination)已存在,在覆盖时会先询问是否真的操作
-l:建立硬连接(hard link)的连接文件,而非复制文件本身
-p:与文件的属性一起复制,而非使用默认属性
-r:递归复制,用于目录的复制操作
-s:复制成符号连接文件(symbolic link),即“快捷方式”文件
-u:若目标文件比源文件旧,更新目标文件

移动文件/文件夹

mv [-fiu] source destination

参数说明:
-f:force,强制直接移动而不询问
-i:若目标文件(destination)已经存在,就会询问是否覆盖
-u:若目标文件已经存在,且源文件比较新,才会更新

删除文件或文件夹

rm [fir] 文件或目录

参数说明:
-f:强制删除
-i:交互模式,在删除前询问用户是否操作
-r:递归删除,常用在目录的删除

查看进程

top

关闭防火墙

systemctl stop firewalld

部署项目需要的东西

docker容器部署以及k8s集群管理

kubernetes之helm简介、安装、配置、使用指南
利用腾讯云平台,item.war或者是class文件和chart文件

一、文章中的字母含义

  • A:部署包名
  • B:项目名,一般项目名与部署包(源代码生成的项目)名称是一致的
  • C:用户名,厂商名。

二、准备镜像源和系统部署包。

镜像源如:tomcat:9.2
1、将tomcat.tar镜像引入到部署环境中:
2、查看当前环境所有镜像

docker images 

3、查询name带tomcat的镜像
docker image ls |grep tomcat
4、若当前环境无源镜像,需要加载一下tomcat镜像

docker load -i tomcat.tar

系统部署包。如:A(war包解压)

三、目录结构

1)mkdir /data/C/
建立一个C,该系统/厂商/用户的所有项目都放在该文件夹下面,便于管理。
2)在C下创建项目文件夹,如:B。在B文件夹下创建目录src、images、chart。
chart:所有进行chart操作的,都在该文件夹下进行。
src:源代码生成的源项目打包解压后的部署包,放在这个文件夹。
image:存放项目生成的镜像。

四、Chart文件

chart简介
chart 是 Helm 的应用打包格式。chart 由一系列文件组成,这些文件描述了 Kubernetes 部署应用时所需要的资源,比如 Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap 等。

chart文件的结构

template目录下存的文件,配置文件的定义(相当于int i)
例如数据库路径{{ .values.data.datasource.url }
value文件中存的时真实的值,(相当于i=1)

chart文件的建立

1、常用的命令

  • Chart打包命令:
    在chart.yaml 目录下执行 (注意有点)

    helm package .
    
  • 其他命令:
    参考地址

2、chart上传

将打包完成后直接上传到harbor仓库上即可,这时在模板商店会生成相应的模板

五、镜像的操作

注意:到B目录下创建Dockerfile文件,创建镜像

1、打镜像,先创建Dockerfile文件

创建Dockerfile脚本文件:
touch Dockerfile
编辑Dockerfile脚本文件
  • 命令

    vim Dockerfile 
    
  • 按i键进入编辑模式,写入如下内容:

    FROM tomcat:9.2  
    
    MAINTAINER images-gateway
    
    ADD ./src/gateway.war /usr/tomcat/webapps/gateway.war
    
    ADD ./src/resolv.conf  /etc/resolv.conf
    
    ENV LANG C.UTF-8
    EXPOSE 8080
    
    
  • 解释:

    FROM 后为tomcat镜像名称:版本号
    from:依赖的东西,例如后端依赖tomcat,前端依赖nginx

    Run mkdir -p 挂载路径
    挂载路径 :在char中模板文件夹下develop.yaml中mountPath: /opt/AAS-V9.0/domains/mydomain/applications

    Copy/ADD 路径1 路径2
    路径1:复制的部署包的位置
    路径2:放到创建的文件夹中

    EXPOSE 8080
    为tomcat暴露的端口

这个脚本是生成项目镜像的脚本,引用已经有的tomcat镜像,把部署包放置在tomcat放置镜像的文件夹中,如果有需要镜像进行别的改动的,可以添加脚本语句。

根据Dockerfile生成镜像
  • 生成镜像命令注意命令中要加一个英文符号“ .”
    docker build --no-cache . -t /data/C/B/images/D:1.0.0 -f Dockerfile   
    docker build -t cssbase:V1.0 .  
    

    -t:打镜像时设置标签
    /data/C/B/images/D:1.0.0 Dockerfile
    src/data/C/B/images:路径
    D:镜像名
    1.0.0:镜像版本
    Dockerfile:刚创建的文件

2、标记本地镜像,将其归入某一仓库

一般情况下,在部署之前,无法得知具体的镜像名称,所以这里可以在现场部署时,进行更改

docker tag 原镜像名:版本号 新镜像名:版本号

2、运行验证镜像可正常使用

  • 命令:利用镜像生成一个容器并启动,相当于docker start 与docker start

    docker run -id --name=mytodaygogs gogs/gogs -p 3000:3000 /bin/bash
    

    /data/C/B/images:路径
    D:镜像名称
    1.0.0:版本号

  • 运行容器

    docker start 容器id/镜像名
    
  • 查看所有容器的运行状态

    docker ps -a
    
  • 重启容器

    docker rstart 容器id/镜像名
    
  • 退出容器

    docker exec -it mygogs /bin/bash
    

运行后,将会启动一个容器加载这个镜像,可以初步测试镜像是否功能正常

3、停止容器运行:

一定要停止容器进行了,再进行下面步骤,否则容易导致值冲突!
	docker ps | grep D 筛选
	docker stop 容器id
	docker rm  容器id

4、镜像打包

  • 打包命令:将远程仓库中的镜像打包到本地

    docker save -o /data/C/B/images/E.tar  远程仓库镜像所在路径/镜像名:版本号
    
  • 解释:

    /data/C/B/images:镜像压缩包所生成的路径,默认为当前目录
    E.tar:生成的镜像压缩包
    远程仓库镜像所在路径/镜像名:版本号

5、将镜像推送到镜像仓库中

  • 将镜像上传到虚拟机images目录中,利用xftp等软件

  • 进入到该目录

  • 加载镜像

    docker load -i E.tar
    
  • 查看镜像

    docker images |grep E
    
  • 镜像装箱(打标签将镜像推送到本地仓库)

     docker tag SOURCE_IMAGE[:TAG] 远程仓库/原镜像名:TAG
    

    SOURCE_IMAGE[:TAG] : 原镜像名称:原版本号
    原镜像名:TAG:原镜像名:新版本号

  • 推送镜像之前可能需要登陆harbor(密码为harbor的账户和密码)

    docker login harbor地址
    
  • 将本地仓库中的镜像推送镜像至harbor仓库(远程仓库)

    docker push 远程仓库/原镜像名[:TAG]
    

    原镜像名[:TAG]:原镜像名:新版本号(即刚刚打标签生成的)

6、镜像备份(从harbor上下载至本地)

chart备份直接下载即可
  • 查看本地仓库中的镜像是否存在需要备份的镜像(即容器)
  • 若没有则将harbor中的镜像拉取到本地仓库
    docker pull 远程仓库的地址/仓库名/镜像名:版本号
    
  • 查看本地仓库是否已经存在需要备份的镜像
  • 将本地仓库中的镜像打包成tar包save命令
  • 查看tar是否已经生成

7、修改镜像版本

  • dockers tag 命令将本地原镜像:新版本号上传到本地仓库
  • dockers save - o 将本地仓库的新镜像保存到本地
  • 或者dockers push 推送到远程仓库

删除镜像

docker rmi 

K8S

查看命名空间

kubectl get namespaces

查看集群的运行状态

kubectl -n namespaces get pod appname

查看项目运行日志

kubectl -n namespaces log -f appname

删除pod,重启应用(删除后自动重启)

kubectl delete -n namespaces pod appname1[appname2]

查看节点的日志

kubectl -n namespaces describe pod appname

进入容器

kubectl -n namespaces  exec -it appname /bin/bash

修改项目运行的yarn文件(可以平滑部署)

kubectl -n  namespaces edit deployment appname

删除容器节点

kubectl -n namespaces delete deployment appname

k8s-yaml

pvc挂载

kubectl apply -f  01pv\ slwcssportal.yaml
kubectl get   pv
kubectl apply -f  02-pvc-slwcssportal.yaml
kubectl get   pvc
apiVersion: v1
kind: PersistentVolume
metadata:
  name: slwcssportal-pv
  namespace: default
  labels:
    pv: slwcssportal-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # FIXME: use the right IP
    server: 10.10.133.204
    path: "/portal"
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs
  volumeMode: Filesystem
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-slwcssportal-nas204
  namespace: default
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  resources:
    requests:
      storage: 1Gi
  selector:
    matchLabels:
      pv: slwcssportal-pv
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "2"
  creationTimestamp: "2020-06-04T05:04:46Z"
  generation: 2
  labels:
    k8s-app: portal
  name: portal
  namespace: default
  resourceVersion: "5426287"
  selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/slwcssportal
  uid: 8b0989cd-fcd0-4a3e-ae90-c24add8abde0
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: cssportal
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: portal
      name: portal
    spec:
      containers:
      - image: portal:V1.74
        imagePullPolicy: IfNotPresent
        name: portal
        resources: {}
        securityContext:
          privileged: false
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /nfsptyf-data1/slwcssportal
          name: storagegxbfulltext
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
 securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: storagegxbfulltext
        persistentVolumeClaim:
          claimName: pvc-slwcssportal-nas204
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2010-06-04T05:07:20Z"
    lastUpdateTime: "2010-06-04T05:07:20Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2010-06-04T05:04:46Z"
    lastUpdateTime: "2010-06-04T05:33:17Z"
    message: ReplicaSet "portal-6b9657756f" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 2
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1
                            

版权声明:本文为qq_40981804原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。