Skip to content

博客

Kubernetes常用命令

Kubernetes集群常用命令

1.1、获取集群当前名称空间下Pod状态

Section titled “1.1、获取集群当前名称空间下Pod状态”
Terminal window
kubectl get pods

1.2、获取所有名称空间下Pod状态

Section titled “1.2、获取所有名称空间下Pod状态”
Terminal window
kubectl get pod --all-namespaces
Terminal window
kubectl get pods --all-namespaces -o wide |grep nodename

https://help.aliyun.com/document_detail/100251.html 关于垃圾产生及回收,您可以看下这篇文章 https://www.kubernetes.org.cn/4508.html

GRPC系列 简述

gRPC是可以在任何环境中运行的现代开源高性能RPC框架。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

图1

  • 在微服务风格架构中有效连接多种服务
  • 将移动设备,浏览器客户端连接到后端服务
  • 生效高效的客户端
  • 十种常用语言的客户端库
  • 高效的连接和简单的服务定义框架
  • 双向流和基于http/2的传输
  • 可插拔身份验证,跟踪,负债均衡和运行状况检查

gRPC默认使用Protocol Buffers序列化协议,用于序列化结构化数据。当然也可以使用json。

定义一个服务, 指定其可以被远程调用的方法及其参数和返回类型。gRPC 默认使用 protocol buffers 作为接口定义语言,来描述服务接口和有效载荷消息结构。

service HelloService {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
message HelloRequest {
required string greeting = 1;
}
message HelloResponse {
required string reply = 1;
}

gRPC支持的四种服务方法:

客户端发送一个请求给服务端,从服务端获取一个应答,就像一次简单的服务调用。

rpc SayHello(HelloRequest) returns (HelloResponse){
}

5.2、服务端流式RPC(Server-side streaming RPC

Section titled “5.2、服务端流式RPC(Server-side streaming RPC)”

客户端发送一个请求给服务端,可获得一个数据流用来读取一系列消息。客户端从返回的数据流里一直读取直到没有更多消息为止。gRPC保证单个RPC调用中的消息顺序。

rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse){
}

5.3、客户端流式RPC**(Client-side streaming RPC)**

Section titled “5.3、客户端流式RPC**(Client-side streaming RPC)**”

客户端用提供的一个数据流写人并发送一系列消息给服务端。一旦客户端完成消息写入,就等服务端读取这些消息并返回应答。gRPC保证单个RPC调用中的消息顺序。

rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse) {
}

5.4、双向流式RPC**(Bidirectional streaming RPC)**

Section titled “5.4、双向流式RPC**(Bidirectional streaming RPC)**”

双方都使用读写流发送一系列消息。这两个数据流是独立的,所以服务端和客户端可以按其期望的任意顺序读写,如:服务端可以在写响应之前等待接收所有客户端消息,或者可以先读消息再写消息,或者其他一些读写组合。每个流中的消息顺序都会保留。

rpc BidiHello(stream HelloRequest) returns (stream HelloResponse){
}

gRPC提供protocol buffer 编译插件,能够从一个定义服务的.proto文件生成客户端和服务端代码。通常gRPC用户可以在服务端实现这些API,并从客户端调用:

  • 在服务端,服务器实现服务声明的方法,并运行gRPC服务器处理客户端调用。gRPC底层架构会解码传入的请求,执行服务方法,编码服务应答。
  • 在客户端,客户端有一个存根实现了服务端相同的方法。客户端可以在本地存根调用这些方法,用合适的protocol buffer消息类型封装这些参数,gRPC来负债发送请求给服务端并返回服务端protocol buff响应。s

gRPC系列-开端

gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持.

gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

过去一段时间,基于gRPC框架进行开发后端服务接口。接下来,将计划一个系列,记录和继续深入研究和更好的使用gRPC。

Redis使用事务

Redis事务同传统关系数据库事务不相同。关系数据库,首先向数据库发送事务开始BEGIN,然后执行读写操作,最后发送COMMIT提交事务,或者通过ROLLBACK回滚放弃事务的修改。

Redis事务以命令MULTI开始,然后传入多个命令,最后以EXEC命令结束。此外,为了达到关系数据库的ROLLBACK效果, 还要配合WATCH命令(有时还会用到UNWATCH和DISCARD命令)。

  • WATCH观察key是否被改动
  • 如果提交时key被改动,EXEC命令将返回null,表示事务失败

如果在事务中,执行用户余额增减变动,类似执行:

WATCH key

$money = GET key

$money += 1

MULTI

SET key $money

EXEC

Http和golang

证书可以自签证书,也可以从CA购买证书,或者使用Let’s Encrypt的免费证书。

package main
import (
"fmt"
"log"
"net/http"
)
func main() {
http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello world")
})
log.Fatal(http.ListenAndServeTLS(":8080", "./defaultCA.pem", "./defaultCA.key", nil))
}
Terminal window
#生成服务端私钥
openssl genrsa -out defaultCA.key 2048
#基于私钥生成自签名(x509)证书(.pem|.crt)
openssl req -x509 -new -nodes -key defaultCA.key -days 1024 -out defaultCA.pem

Let’s Encrypt是一个提供免费证书的非盈利机构,并且提供HTTP API来获取证书。

golang.org/x/crypto/acme/autocert包可以自动从Let’s Encrypt或者其他任何基于ACME CA获取证书。