二进制搭建Kubernetes集群
环境准备
IP
配置
主机名
组件
192.168.83.128
2c4g
k8s-master
apiserver、controller-manager、scheduler、etcd
192.168.83.129
2c4g
k8s-node1
kubelet、kube-proxy、docker、flannel、etcd
192.168.83.130
2c4g
k8s-node2
kubelet、kube-proxy、docker、flannel、etcd
关闭防火墙
systemctl stop firewalldsystemctl disable firewalld
关闭selinux
setenforce 0
关闭swap
swapoff -a
添加主机名与IP对应关系(记得设置主机名)
vi /etc/hosts192.168.83.128 k8s-master192.168.83.129 k8s-node1192.168.83.130 k8s-node2
将桥接的IPv4流量传递到iptables的链
ca ...
Kubernetes组件及介绍
Kubernetes节点包含Master(主控节点)和Node(工作节点)
MasterK8S中的Master是集群的控制节点,负责整个集群的管理和控制
在Master节点上运行着这些Kubernetes组件:
apiserver:它是集群的统一入口,提供集群管理的REST API接口,只有apiserver可以操作etcd
scheduler:负责资源的调度,通过apiserver的watch接口监听新建Pod副本信息,并通过调度算法为该新建的Pod选择最合适的node
controller-manager:K8S集群所有资源对象的自动化控制中心,集群内所有controller的核心管理者,针对每一种资源都有相应的controller,保证其下管理的controller所对应的资源都处于期望的状态
etcd:用于保存集群资源对象以及状态数据
docker:负责容器的创建和管理
NodeNode是K8S集群的工作节点,Master会把任务分配给Node,当Node发生宕机时,Master会把此Node上的工作负载转移到其他Node
每个Node节点上运行着这些组件:
Kubel ...
Jenkins持续发布OCP微服务到Kubernetes
环境准备
Kubernetes集群:https://1335402049.github.io/2019/10/26/Kubeadm%E9%83%A8%E7%BD%B2Kubernetes%E9%9B%86%E7%BE%A4/
GitLab(独立部署):https://1335402049.github.io/2020/04/13/GitLab%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2/
Jenkins:https://1335402049.github.io/2020/12/30/Kubernetes%E9%83%A8%E7%BD%B2jenkins/
Harbor:https://1335402049.github.io/2020/08/21/CentOS7%E6%90%AD%E5%BB%BAHarbor%E7%A7%81%E6%9C%89%E4%BB%93%E5%BA%93/
OCP项目准备与配置
ocp项目作者Gitee地址:https://gitee.com/owenwangwen/open-capacity-platform
修改docker ...
Kubeadm重新获取token
当你的token忘记或者过期了,可以重新获取token,让新机器加入集群中
获取tokenkubeadm token createkubeadm token list
获取CA公钥的哈希值openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
节点加入集群kubeadm join 192.168.1.110:6443 --token <token> --discovery-token-ca-cert-hash sha256:<CA公钥哈希值>
Jenkins配置Kubernetes集群
安装插件安装 Kubernetes 插件
配置集群信息Manage Jenkins -> Configure System -> Cloud
配置Pod模板配置 jenkins slave 容器
配置volume,让pod中容器共享宿主机docker以及可以使用kebuctl命令访问k8s集群
避免权限问题,配置serviceaccount
测试Freestyle project创建任务
输入刚刚在pod模板填写的标签
构建里面编写shell脚本
保存后 Build Now,查看pod的整个过程
在jenkins控制台查看构建结果
测试Pipeline下载 Pipeline 插件
创建流水线
编写pipeline
pipeline { agent { label 'node1' } stages { stage('hello world') { steps { sh ...
Kubernetes部署jenkins
Jenkins Master运行在Kubernetes集群的一个node上,并且数据存储到volume上去,Jenkins Slave会按照需求动态的创建并且自动删除。
部署首先需要nfs storageclass动态创建pv,参考这篇文章:https://1335402049.github.io/2020/09/16/Kubernetes%E4%B8%AD%E4%BD%BF%E7%94%A8NFS%E7%9A%84StorageClass/
应用 namespace
kubectl create ns devops
应用 rbac
apiVersion: v1kind: ServiceAccountmetadata: name: jenkins-sa namespace: devops---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata: name: jenkins-crdroleRef: kind: ClusterRole name: clus ...
Jenkins发布pod到Kubernetes
因为jenkins是独立部署的,所以这种方式发布pod到k8s上,我想到的是提高jenkins用户权限(以root用户启动jenkins)来使用kubectl命令
编写资源清单
应用 secret
kubectl create secret docker-registry harbor-registry --docker-server=192.168.1.112 --docker-username=admin --docker-password=harbor123 --docker-email=admin@qq.com
statefulset
apiVersion: apps/v1kind: StatefulSetmetadata: name: cloud-eurekaspec: replicas: 1 selector: matchLabels: app: eureka serviceName: cloud-eureka template: metadata: labels: ...
Jenkins打包制作镜像并上传harbor
在前面文章已经将代码从git拉取到本地了,现在需要将本地代码打包制作成镜像,然后上传到harbor仓库
配置maven在全局工具设置里面配置maven地址
在pipeline使用tools使用
tools { # 这里的maven名称也就是全局工具配置的名称 maven 'maven'}
拉取git上代码stage('pull git code') { steps { git credentialsId:"${credentialsId}",url:"${git_url}",branch: "${git_branch}" }}
打包stage('mvn clean package') { steps { sh "mvn ...
Jenkins拉取GitLab上的代码
jenkinsfilepipeline { agent any environment { git_url = 'http://192.168.1.112/root/open-capacity-platform.git' credentialsId = 'gitlab' git_branch = 'master' } stages { stage('clean workspace') { steps { cleanWs() } } stage('pull git code') { steps { git cred ...
Jenkins从远程git仓库执行jenkinsfile
编写脚本并上传git仓库首先将pipeline脚本写好上传至git仓库
test-demo1.File 文本简单输出 helloworld
pipeline { agent any stages { stage('print helloworld') { steps { echo "helloworld" } } }}
jenkins执行远程git仓库jenkinsfile在jenkins机器上生成ssh key
ssh-keygen -t rsa -C "root@example.com"
将公钥id_rsa.pub内容复制到gitlab上,图片中key位置中
在jenkins上添加凭据,将私钥id_rsa内容复制进图片中key位置
在jenkins中创建流水线,并配置
执行流水线任务