K8S是什么?

k8s是基于容器技术的分布式架构领先方案。它是google严格保密十几年的秘密武器Brog的一个开源版本;是Google开源的一个容器编排引擎,支持自动化部署、大规模可伸缩、应用容器化管理。

K8S用来做什么?

说白了就是管理docker容器的,通过yaml文件生成容器 不需要手动去构建,可以生成多个容器,在一个容器挂掉的情况下,自动生成新的容器,配合jenkin做一个持续集成(CI),管理容器 jenkins相关内容:Jenkins+Gitlab+docker部署全流程 基于Centos7
流程如下:

gitlab webhooks触发jenkins拉取代码
dev
test
prod
提交代码
jenkins编译代码,通过脚本文件和编写好K8S的yaml文件即可交由K8S执行容器化部署
通过namespace来区分环境部署:这块存疑没有验证
开发环境
测试环境
生成环境
一、K8S的搭建
  • 可以参考以下文章kubeadm部署最新版k8s集群v1.18.0
  • 如果要搭建集群的话一定要记下来生成的token,后面node节点加入master要用到,用法如下图,在node节点的机器上输入红线所指的命令

在这里插入图片描述

  • 如果token和sha256没有记住可以通过如下命令来查看,或者参考这篇文章:忘记K8S生成token的解决方案

  • kubeadm token list
    在这里插入图片描述

  • 也可以通过如下命令来生成一个永久的token : kubeadm token create --ttl 0

  • 光有token还是不够的还需要借助一个sha256,通过如下命令来查看sha 256:

 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

- 如果是公网会有网络的坑,参考如下文章:阿里云搭建K8S初始化的坑
- 记好之后如上面面第一张图所示

  • TIPS:一定要注意看上面文章的网络部分,网络配置不好后面的步骤就很难执行了,算是有一点小坑
二、K8S的YAML文件编写(重点 有坑)

在这里插入图片描述

kubectl create clusterrolebinding test:anonymous --clusterrole=cluster-admin --user=system:anonymous

三、 网络踩坑!!

1、修改hosts配置域名解析

vi /etc/hosts

修改完etc之后单独重启命令
/etc/init.d/network restart

2、修改 /etc/resolv.conf文件
在这里插入图片描述

 vi /etc/resolv.conf
 
 修改完之后重启网络命令
 service network restart
四、jenkins的脚本
#!/bin/sh
#!/bin/sh 
# 你的jar包名字
jarName=aigateClient-1.0.0-exec.jar
# 对应k8s的app name ,同时也作为镜像名,因为打镜像的时候是不能有大写的
projectName=aigateclient
# 复制的路径
moveSpace=aigateClient
#jenkins的工作空间 
docker_path=${WORKSPACE}
echo "工作空间:"${WORKSPACE}

cp ${WORKSPACE}/${moveSpace}/target/${jarName} ${docker_path}

echo "复制地址为:"${WORKSPACE}/${moveSpace}/target/${jarName} ${docker_path}
#执行脚本
sh /root/docker_dir/deploy_docker.sh ${projectName} ${docker_path} ${jarName}

  • 这一步脚本构建镜像,和删除老的镜像,一定要注意脚本的编写,不要出现名字写错。。防止运行不了
#!bin/sh
# maven01 $workspace $jarname
# ${projectName} ${docker_path} ${jarName}
set -e
projectName=$1

docker_path=$2

appName=$3

#user_name=
#password=
tag=$(date +%s)

sever_path=192.168.209.4:5000

target_image=${projectName}:${tag}

#${BUILD_NUMBER}

echo "镜像名 ${target_image}"

cd ${docker_path}

echo "路径为:${docker_path}"

echo "${appName}"
docker build --build-arg app=${appName} -t ${target_image} .

echo "构建成功:${target_image} ${sever_path}/${projectName}"
docker tag ${target_image} ${sever_path}/${projectName}

 echo  "推送是 docker push ${server_path}/${projectName}:latest"

docker push ${sever_path}/${projectName}:latest


docker image rm `docker images -q --filter reference=${projectName}`

  • 执行编写好的kube.yaml,由k8s执行部署,下面的脚本需要设置jenkins服务器到k8s-master服务器的免密登陆
  • 生成sshKey的命令
    cd ~/.ssh
    ssh-keygen -t rsa -C xxx@txxx.cn
  • 把生成的sshkey拷贝到master节点,这步做完就可以实现master节点的免密登陆
    ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.209.4
set -e

echo ${WORKSPACE}
# 把kube.yaml移动到宿主机的root目录下
scp ${WORKSPACE}/*.yaml 192.168.209.3:/root/
# 执行脚本
ssh 192.168.209.3 '/usr/bin/kubectl apply -f /root/kube.yaml'

K8S一些基础命令
  • 查看pod运行在什么节点上:
kubectl  get pods  -o wide
  • 查看全部pod所在的节点:
kubectl get pods -o wide --all-namespaces
  • 根据podName查找:
kubectl get po --all-namespaces | grep maven
  • 查看日志:
kubectl logs -f podName
  • 查看某个命名空间下的pod锁在节点:
kubectl get pods -n kube-system -o wide
  • 查看有问题的pod详情:
kubectl describe pods podName  -n kube-system
  • 查看具体的某一个命名空间下的详情和端口:
kubectl get pods,svc -n kubernetes-dashboard -o wide
  • 删除指定的pod:
kubectl delete pod podName -n kube-system
  • 查看具体的pod 500行日志:
kubectl logs -f  --tail 500   etcd-izuf64dhkm7uc5t46cuojkz  -n kube-system` (-n  是指name space,如果不加这个默认在default下面寻找)
  • 查看某个命名空间下pod运行节点命令
kubectl get pods -o wide -n kube-system
  • 删除某个用yaml启动的pod
kubectl delete -f centos_deployment.yaml
  • 用yaml启动pod
kubectl create -f centos_deployment.yaml
Logo

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

更多推荐