GitHub Action

  |   0 评论   |   0 浏览

WorkFlow GithubWorkFlow 就是 Git 自带的 CI 服务 WorkFlow 文件 name: Greet Everyone # 事件 on: [push] # 工作集合 jobs: build: # 作业名称为 Greeting name: Greeting # 此作业在 Linux 上运行,runs-on 选项一共就有几种类型 runs-on: ubuntu-latest steps: # 此步骤使用 GitHub 的 hello-world-javascript-action:https://github.com/actions/hello-world-javascript-action - name: Hello world uses: actions/hello-world-javascript-action@v1 with: who-to-greet: 'Mona the Octocat' id: hello # 此步骤打印上一步操作的输出(时间)。 - name: Echo the greeting's time run: echo 'The time was $....

解析cobra

  |   0 评论   |   0 浏览

Cobra // Copyright © 2015 Steve Francia <spf@spf13.com>. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or ....

kubernetes文档知识点个人总结

  |   0 评论   |   0 浏览

只是整理知识点,所有内容来自 http://docs.kubernetes.org.cn/251.html,如有侵权请发送邮件通知删除 架构 K8s 主要组件 etcd: 保存集群状态 apiserver: 所有资源操作入口,认证授权,访问控制,API 注册,服务发现 controller-manager: 维护集群状态,故障检测,自动扩展,滚动更新 scheduler: 资源调度 kubelet: 维护容器的生命周期,CVI 和 CNI 管理 cri: 镜像管理和 pod 运行 kube-proxy: 为 Service 提供 cluster 服务发现和负载均衡 K8s addons kube-dns: 集群 dns 服务,多用 cni IngressController: 外网入口 Heapster: 资源监控 Dashboard: GUI Federation: 跨区用集群 Fluentd-elasticsearch: 日志采集存储查询 分层架构 核心层:Kubernetes 最核心的功能,对外提供 API 构建高层的应用,对内提供插件式应用执行环境 应用层:部署(无状态应用、有状态应用、批处....

K8S-Scheduler 启动脚本

  |   0 评论   |   0 浏览

#!/bin/bash # 是否输出错误信息 /opt/kubernetes/server/bin/kube-scheduler --logtostderr false \ # 日志级别 --v 2 \ # 日志目录 --log-dir /opt/kubernetes/logs \ # 自动找主节点 --leader-elect true \ # apiserver 地址 --master 127.0.0.1:8080 \ # 服务监听地址 --address 127.0.0.1

K8S-Controller-Manager启动脚本

  |   0 评论   |   0 浏览

#!/bin/bash // 错误是否输出 /opt/kubernetes/server/bin/kube-controller-manager --logtostderr false // 日志级别 --v 2 // log 目录 --log-dir /opt/kubernetes/logs // 多个 APIServer 自动选择一个调度 --leader-elect true // 指定 APIServer 的 API 地址 --master 127.0.0.1:8080 // 服务监听地址 --address 127.0.0.1 // 是否支持网络插件 --allocate-node-cidrs true // 基于插件分配网段地址 --cluster-cidr 10.244.0.0/16 // 客户端分配地址的范围 --service-cluster-ip-range 10.0.0.0/24 --cluster-signing-cert-file /opt/ssl/k8sca/ca.pem --cluster-signing-key-file /opt/ssl/k8sca/ca-key.p....

K8S-API-SEVER 启动脚本

  |   0 评论   |   0 浏览

#!/bin/bash /opt/kubernetes/server/bin/kube-apiserver # 是否打印错误信息 --logtostderr false # 日志级别 --v 2 # 日志目录 --log-dir /opt/kubernetes/logs # etcd 的地址 --etcd-servers https://192.168.111.119//192.168.111.99:2379,https://192.168.111.109:2379 # 本服务,APIServer 的地址 --bind-address 192.168.111.119 # 本服务端口 --secure-port 6443 # 广播地址 --advertise-address 192.168.111.119 # 是否 使用超级管理员权限创建容器 --allow-privileged true # 启动 Service 时生成的虚拟网段 --service-cluster-ip-range 10.0.0.0/24 # 开启插件 --enable-admission-plugi....

K8S-ETCD 启动脚本

  |   0 评论   |   0 浏览

那就请使用这个 Command 吧 由于 GitHub Release 下载下来只有 etcd 和 etcdctl 并没有 配置文件 和 systemctl.service 所以迫不得已写了个命令行,贴出来已备后用 #!/bin/bash // name 请改成当前节点 etcd 的 name // etcd 命令请指定到自己的目录 // ip 地址请改成自己的地址 // pem 证书目录请改成自己的目录 /opt/etcd/etcd --name etcd-1 \ --data-dir var/lib/etcd/default.etcd \ --listen-peer-urls https://192.168.1.109 \ --listen-client-urls https://192.168.1.109//127.0.0.1:2379 \ --advertise-client-urls https://192.168.1.109 \ --initial-advertise-peer-urls https://192.168.1.109 \ ....

关于Centos集群时间同步

  |   0 评论   |   0 浏览

安装 chrony yum install chrony -y 修改配置文件 VIM /etc/chrony.config master // 这里 写 Master 节点的地址 server 111.111.111.111 iburst # Record the rate at which the system clock gains/losses time. driftfile /var/lib/chrony/drift # Allow the system clock to be stepped in the first three updates # if its offset is larger than 1 second. makestep 1.0 3 rtcsync # Enable hardware timestamping on all interfaces that support it. #hwtimestamp * # Increase the minimum number of selectable sources required to adjust # th....

Golang基础总结

  |   0 评论   |   0 浏览

数据类型 bool int,int8-64 uint8-64 float32 float64 complex64/128 byte rune string Array,Map,Slice,*,& 关键字 package,import if,else if,else,switch,select,for,while,make struct,interface,func,defer,error,panic,recover 包 目录包说明 bufio 实现缓冲的 I/Obytes 提供了对字节切片操作的函数 crypto 收集了常见的加密常数 errors 实现了操作错误的函数 Expvar 为公共变量提供了一个标准的接口,如服务器中的运算计数器 flag 实现了命令行标记解析 fmt 实现了格式化输入输出 hash 提供了哈希函数接口 HTML 实现了一个 HTML5 兼容的分词器和解析器 image 实现了一个基本的二维图像库 io 提供了对 I/O 原语的基本接口 log 它是一个简单的记录包,提供最基本的日志功能 math 提供了一些基本的常量和数学函数 mine 实现了部分的 MIME 规范 net 提供了一个对 UNIX 网络....

从Linux体系到GPM

  |   0 评论   |   0 浏览

1.Linux-CPU 我们先看一下 Linux 系统的整体结构,这里插入搜集的两张图 从图上可知,Linux 组成分为 User Space,Kernel Space,Hardware Space 用户层,内核层,硬件层 用户层: 比如我们看到的命令行界面,我们的浏览器,执行的 Shell,或者 gcc 编译器,这些能够直接看到,使用的称之为用户层,个人理解,就是软件层。 内核层:由 Linux 内核实现的 进程管理,内存管理,虚拟化,网络管理,文件管理,等等等一个操作系统基本必备的功能,组合起来变成了内核。 硬件层:CPU,内存,网卡,声卡,IO 设备等等等 再来看一下内核 内核调用错综复杂,我们只看 threads 一列, 用户层的线程由内核中的调度器来进行调度,最后走到硬件层的 CPU,去争抢 CPU 的时间片 时间片:举个不恰当的例子,在单核计算机中我们如何做到同时做两件事儿了,就涉及到,两个进程争抢时间片或者说 CPU 分配时间片给两个进程, 浏览器拿到时间片就渲染一会儿,网易云拿到时间片就加载一会儿音乐,但是 CPU 调度切换时间非常快,以至于你的感受就是一边在看网页一边听....

记一次令人心悸的GITLAB升级经历

  |   0 评论   |   0 浏览

起因 今天日常连接上 VPN,上 GitLab 私服,对离职人员进行 block,3 个月无更新的项目进行 archive 操作,将新项目分好组,并通知其余负责人。 然后!然后我想到了最近三个月都没有更新 GitLab 了,12.5.1 版本,最新的是 12.8 版本,想着更新一下,然后问题就来了。 经过 按照常规操作,https://packages.gitlab.com/gitlab/gitlab-ce,从这个网站 wget 下最新的 GitLab Rpm 包,准备更新。 首先进行了版本查看(由于 GitLab 在数据恢复的时候必须保持版本一致),并记录了当前的 GitLab 全版本号 gitlab-ce-12.5.3-ce.0.el7.x86_64 然后进行了数据备份操作 gitlab-rake gitlab:backup:create 并将备份后的文件本地保留一份到~目录下,scp 出去一份到自己的服务器上 最后感觉万无一失的开始搞 yum install -y gitlab-ce-12.8xxxxx,然后看着日志滚动刷屏,我淡然的感觉应该没什么问题,因为更了不下 5 个版本了,就出去抽....

GO指南Scroll

  |   0 评论   |   0 浏览

1.Go 环境 # GO export GO111MODULE=on export GOPROXY=https://goproxy.io export GOBIN=HOME/go/bin export PATH=PATH:GOPROXY:GOBIN 2.包每个程序都是包,包入口为 main 包,包名与导入路径的最后一个目录一致。例如, "math/rand" 包由 package rand 3.导入 import "package name"import( "packagename""packagename") 4.导出首字母为大写是导出的函数/变量等 5.函数可以没有参数或者接收多个参数,返回单个/多个或不返回值 func swap(x int, y int) (int, int) { return y, x } func swap(x,y int)(int,int){ return y,x} 6.函数返回值可以被命名 func swap(x,y int)(a,b int){a = y; b = x} 7.var 变量可以定义在不同域,并给予初始化值 package ....

Gradle多模块+SpringCloud微服务实践

  |   0 评论   |   0 浏览

1.Project REP3_CLOUD 2.Cloud 简单配置 2.1.父模块配置 主要就是配置一下通用依赖和基本插件 buildscript { ext { springBootVersion = '2.2.2.RELEASE' springBootManagementVersion = '1.0.8.RELEASE' springCloudVersion = 'Hoxton.SR1' } repositories { maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' } mavenCentral() maven { url 'https://repo.spring.io/snapshot' } maven { url 'https://repo.spring.io/milestone' } } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") cl....

解刨SOLO认证流程

  |   0 评论   |   0 浏览

0.要搞个东西呀所以不得不解析一下代码.一行一行走 1.开始 点击开始使用时调用 @RequestProcessing(value = "/login/redirect", method = HttpMethod.GET) public void redirectAuth(final RequestContext context) { // 从当前域里拿到站点地址 String referer = context.param("referer"); if (StringUtils.isBlank(referer)) { referer = Latkes.getServePath(); } // 生成一个 16 位随机的东西然后跟入站点地址 String state = RandomStringUtils.randomAlphanumeric(16) + referer; // 放到集合里 STATES.add(state); // 构造 请求 url 请求 hacpai,回调/login/callback final String loginAuthURL = "https://hacpai....

C Queue Demo

  |   0 评论   |   0 浏览

queue.h #ifndef QUEUE_H #define QUEUE_H #include <stdbool.h> typedef int Item; #define MAXQUEUE 10 typedef struct node { Item item; struct node *next; } Node; typedef struct queue { // 队列首项 Node *front; // 队列尾项 Node *rear; // 队列长度 int items; } Queue; // 初始化队列 void InitializeQueue(Queue *pq); // 队列是否满了 bool QueueIsFull(const Queue *pq); // 队列是否空了 bool QueueIsEmpty(const Queue *pq); // 队列项数 int QueueItemCount(const Queue *pq); // 入队 bool EnQueue(Item item, Queue *pq); // 出队 bool DeQueue(....

C LinkList Demo

  |   0 评论   |   0 浏览

list.h head 头类,定义接口 // 如果没有定义 LIST_H_宏 #ifndef LIST_H_ // 定义 LIST_H 宏 #define LIST_H_ // 布尔 #include <stdbool.h> // 标题长度 #define TSIZE 45 // 电影 结构体 struct film { // 电影名称 char title[TSIZE]; // 评分 int rating; }; // 将 struct film 用 Item 类型代替 typedef struct film Item; // 将 struct node 使用 Node 代替 typedef struct node{ Item item; struct node *next; } Node; // 链表结构和 Node 类相同 typedef Node *List; // 初始化链表 void InitalizeList(List *plist); // 链表是否为空 bool ListIsEmpty(const List *plist); // 是否还可以创建新的 next 节点 boo....

《C Primer Plus》手记三

  |   0 评论   |   0 浏览

C Primer Plus 手记一 C Primer Plus 手记二 13.位操作 编号 0 0 0 0 0 0 0 0 ^ ^ ^ ^ ^ ^ ^ ^ 7 6 5 4 3 2 1 0 7 为最高位,0 为最低位' 7-0 每个位置为 1 分别代表为 128 64 32 16 8 4 2 1 所以一个 bytes 最大为 128+64+32+16+8+4+2+1 = 255 最小为 0000000 = 0 一个 byte 8 位 [] [] [] [] [] [] [] [] 11111111 = 255 00000000 = 0 所以 单字节 取值范围为 0-255 高阶位存储符号 1000 0001 = -1 1111 1111 = -127 1000 0000 = -0 0000 0001 = 1 0111 1111 = +127 0000 0000 = +0 正负 0 的问题可以用二进制补码来解决 正数的反码和补码都与原码相同。 负数的反码为对该数的原码除符号位外各位取反。 负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加 1 二进制运算符 // 取反 ~(10011010) -&....

Gitlab简易Release脚本

  |   0 评论   |   0 浏览

#!/usr/bin/env bash echo -n "0.请输入你的 GitHub Access Token:" read token echo -n "1.请输入项目的 id:" read id echo -n "2.请输入项目 release 的名称:" read name echo -n "3.请输入即将创建 release 版本的 tag:" read tag_name echo -n "4.请输入 release 的描述:" read description curl --header 'Content-Type: application/json' --header "PRIVATE-TOKEN: token" \ --data '{ "name": "'name'", "tag_name": "'tag_name'", "ref":"'tag_name'" ,"description": "'description'" }' \ --request POST http://gitlab_url/api/v4/projects/id/releases

《C Primer Plus》手记二

  |   0 评论   |   0 浏览

手记一 11.文件 // 标准文件 // C 会自动打开三个文件 standard input 标准输入 standard output 标准输出 standard // error output 标准错误输出 standard input 通常为键盘 standard output // 通常为显示器 通常标准输入为程序提供输入 getchar() scanf() 标准输出 // putchar(),puts(),printf() #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { // 读取文件时存储每个字符 int ch; // 文件指针 FILE *fp; // 记录文件行数 unsigned long count = 0; // 效验传入参数 if (argc == 0) { printf("Usage: %s filename\n", argv[0]); exit(EXIT_FAILURE); } // 效验是否有文件,如果没有,指针就指不上 if ((fp....