环境描述:
192.168.0.63为k8s集群主节点,保证你的集群里dns与ingress已经安装了

编译打包就不叙述了,主要流程就是:
编译打包-> build镜像 -> 上传镜像到私服 -> 使用ansible-playbook拷贝模板文件到集群主节点 -> 更改模板文件 -> create pod,service,ingress
#
#
k8s 使用配合Jenkins CICD 方案
#
#
#
k8s 使用配合Jenkins CICD 方案

#
#
k8s 使用配合Jenkins CICD 方案
#
#
k8s 使用配合Jenkins CICD 方案

#
#

docker images | grep ${projectname}-${environment} | gawk '{print $3}' | xargs docker rmi;
docker images | grep none | gawk '{print $3}' | xargs docker rmi;docker build -t registry.skong.com/${projectname}-${environment}:${branch} .;
docker push registry.xxxx.com/${projectname}-${environment}:${branch};
cp /data/source/templet/templet.yaml .; cp /data/source/templet/ingress_templet.yaml .;
sed -i ‘s/projectname/${projectname}/’ templet.yaml;
sed -i ‘s/environment/${environment}/’ templet.yaml; 
sed -i ‘s/branch/${branch}/’ templet.yaml;
sed -i ‘s/projectname/${projectname}/’ ingress_templet.yaml;
sed -i ‘s/environment/${environment}/’ ingress_templet.yaml; 
sed -i ‘s/_/-/’ ingress_templet.yaml; sed -i ‘s/_/-/’  templet.yaml;
sed -i ‘s/projectname1/${projectname}/’ templet.yaml
ansible-playbook /data/ansible/playbook/linux/install_docker_service.yml --extra-vars 'hosts=192.168.0.63 Jenvironment=${environment} sourcepath=${projectname}                               warpath=/data/jenkins/workspace/${environment}-${projectname}';

#
#
k8s 使用配合Jenkins CICD 方案
#
#

Ansible-playbook文件

[root@jenkins-master templet]# pwd
/data/source/templet
[root@jenkins-master templet]# cat install_docker_service.yml 
- name: send {{sourcepath}}_{{Jenvironment}}
  hosts: '{{hosts}}'
  tasks:
        - name: check pod {{sourcepath}}-{{Jenvironment}}
          shell: source /etc/profile && kubectl get po |grep {{sourcepath}}_{{Jenvironment}} |wc -l
          register: checkpod
          ignore_errors: True

        - name: remove {{sourcepath}}_{{Jenvironment}}
          file: path=/data/source/{{sourcepath}}_{{Jenvironment}} state=absent

        - name: mkdir {{sourcepath}}_{{Jenvironment}}
          file: path=/data/source/{{sourcepath}}_{{Jenvironment}} state=directory

        - name: copy {{warpath}}/ingress_templet.yaml to {{sourcepath}}_{{Jenvironment}}
          copy: src={{warpath}}/ingress_templet.yaml dest=/data/source/{{sourcepath}}_{{Jenvironment}}/

        - name: copy {{warpath}}/{{sourcepath}}.yaml to {{sourcepath}}_{{Jenvironment}}
          copy: src={{warpath}}/{{sourcepath}}.yaml dest=/data/source/{{sourcepath}}_{{Jenvironment}}/

        - name: restart {{sourcepath}}_{{Jenvironment}}
          shell: source /etc/profile && kubectl set image deployment/{{sourcepath}}-{{Jenvironment}}-deployment {{sourcepath}}-{{Jenvironment}}-pod=registry.xxxx.com/{{sourcepath}}-{{Jenvironment}}:master && kubectl rollout history deployment/{{sourcepath}}-{{Jenvironment}}-deployment
          when: checkpod.stdout == "1"

        - name: start {{sourcepath}}_{{Jenvironment}}
          shell: cd /data/source/{{sourcepath}}_{{Jenvironment}}/ && source /etc/profile && kubectl create -f ingress_templet.yaml && kubectl create -f {{sourcepath}}.yaml --record
          when: checkpod.stdout == "0"
[root@jenkins-master templet]# 
[root@jenkins-master templet]# 

#
#
k8s 使用配合Jenkins CICD 方案

#

#

模板yaml文件
templet.yaml用来创建pod,service的文件,需要替换里面的项目名和环境名(#不能出现下划线)

[root@jenkins-master templet]# cat templet.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: projectname-environment-deployment
spec:
  replicas: 2
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        app: projectname-environment-pod
    spec:
      terminationGracePeriodSeconds: 60
      containers:
        - name: projectname-environment-pod
          image: basic-repository.xxxx.com/xxxx/projectname1-environment:branch
          ports:
            - containerPort: 80
      imagePullSecrets:                                              //harbor镜像仓库密码证书,没使用harbor可以不写
        - name: kubesystemsecret

---

apiVersion: v1
kind: Service
metadata:
  name: projectname-environment-service
  labels:
    app: projectname-environment-service
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: projectname-environment-pod
[root@jenkins-master templ··#

#
#
k8s 使用配合Jenkins CICD 方案
#
\写帖子读代码内容有偏差以图片为主
#

Ingress文件是相当与nginx一样的功能

[root@jenkins-master templet]# cat ingress_templet.yaml 
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: projectname-environment-ingress
  namespace: default
spec:
  rules:
  - host: environment-projectname.xxxx.com
    http:
      paths:
      - path: /
        backend:
          serviceName: projectname-environment-service
          servicePort: 80

#
#
#
k8s 使用配合Jenkins CICD 方案
#
#
#
k8s 使用配合Jenkins CICD 方案

#

kubectl create -f test.yaml --record

#
#
k8s 使用配合Jenkins CICD 方案

#

kubectl create -f ingress-test.yaml

#

#
k8s 使用配合Jenkins CICD 方案

#

curl -v http://192.168.120.17 -H 'host: dev-platform-business.xxxx.com'

//如果是测试写上host   192.168.120.17 dev-platform-business.xxxx.com

#
#
#

k8s 使用配合Jenkins CICD 方案

#
#

kubectl rollout history deployment                                                             //查看deployment更新记录历史
kubectl rollout history deployment/sk-platform-business-dev-deployment

#
#

kubectl set image deployment/sk-platform-business-dev-deployment sk-platform-business-dev-pod=basic-repository.xxxx.com/xxxx/sk_platform_center_dev:master
///更新指定deployment的镜像,可以通过此命令来更新发版

#
#

k8s 使用配合Jenkins CICD 方案
#
#

kubectl rollout undo deployment/sk-platform-business-dev-deployment --to-revision=1
//undo参数为回滚命令,所以在创建时--record参数很重要

#
#
k8s 使用配合Jenkins CICD 方案
#
#

//这个步骤在install_docker.yml已经添加此命令,但是Jenkins应该是不会显示,应该通过ansible命令在最后执行:

ansible 192.168.0.63 -m shell -a '/data/kubernetes/bin/kubectl rollout history deployment/sk-platform-business-dev-deployment'

#
#
k8s 使用配合Jenkins CICD 方案

#
#
k8s 使用配合Jenkins CICD 方案
#

#

命令

create
通过文件名或标准输入创建资源
expose
将一个资源公开为一个新的Service
run
在集群中运行一个特定的镜像
set
在对象上设置特定的功能
get
显示一个或多个资源    
explain
文档参考资料。
edit
使用默认的编辑器编辑一个资源。
delete
通过文件名、 标准输入、 资源名称或标签选择器来删除资源。
rollout
管理资源的发布
rolling-update
对给定的复制控制器滚动更新
scale
扩容或缩容Pod数量, Deployment、 ReplicaSet、 RC或Job
autoscale
创建一个自动选择扩容或缩容并设置Pod数量
certificate
×××资源
cluster-info
显示集群信息
top
显示资源(CPU/Memory/Storage) 使用。 需要Heapster运行
cordon
标记节点不可调度
uncordon
标记节点可调度
drain
维护期间排除节点
taint
命令

describe
显示特定资源或资源组的详细信息
logs
在一个Pod中打印一个容器日志。 如果Pod只有一个容器, 容器名称是
可选的
attach
附加到一个运行的容器
exec
执行命令到容器
port-forward
转发一个或多个本地端口到一个pod
proxy
运行一个proxy到Kubernetes API server
cp
拷贝文件或目录到容器中
auth
检查授权
apply
通过文件名或标准输入对资源应用配置
patch
使用补丁修改、 更新资源的字段
replace
通过文件名或标准输入替换一个资源
convert
不同的API版本之间转换配置文件
label
更新资源上的标签
annotate
更新资源上的注释
completion
用于实现kubectl工具自动补全
api-versions
打印受支持的API版本
config
修改kubeconfig文件(用于访问API, 比如配置认证信息)
help
所有命令帮助
plugin
运行一个命令行插件
version
打印客户端和服务版本信息
1、创建
kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
2、查看
kubectl get deploy
kubectl get pods --show-labels
kubectl get pods -l app=example
kubectl get pods -o wide
3、发布
kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service
kubectl describe service nginx-service
4、故障排查
kubectl describe TYPE NAME_PREFIX
kubectl logs nginx-xxx
kubectl exec –it nginx-xxx bash
5、 更新
kubectl set image deployment/nginx nginx=nginx:1.13
or
kubectl edit deployment/nginx
资源发布管理:
kubectl rollout status deployment/nginx
kubectl rollout history deployment/nginx
kubectl rollout history deployment/nginx --revision=3
kubectl scale deployment nginx --replicas=10
6、 回滚
kubectl rollout undo deployment/nginx-deployment
kubectl rollout undo deployment/nginx-deployment --to-revision=3
7、删除
kubectl delete deploy/nginx
kubectl delete svc/nginx-service

k8s 使用配合Jenkins CICD 方案

楼镇图

转载于:https://blog.51cto.com/13386520/2336067

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐