跳到主要内容

What is a channel in Go

· 阅读需 3 分钟
Ryan
Cloud-Native Operations Engineer

In Go, a channel is a powerful tool used to facilitate communication and synchronization between goroutines. Channels allow you to pass data between goroutines safely, without the need for explicit locking or other complex synchronization mechanisms.

How Channels Work?

Channels in Go provide a typed conduit through which goroutines can send and receive data.

You can think of a channel as a pipe: one goroutine sends data into the channel, and another goroutine receives the data from the other end.

Channels are typed, meaning that a channel can only transfer data of a specific type. For example, a channel of chan int can only pass integers.

0b36157df206

类型断言

· 阅读需 3 分钟
Ryan
Cloud-Native Operations Engineer

1. 类型断言的作用

在 Go 语言中,当一个结构体或其他类型赋值给 interface{} 时,Go 会将原始值和它的类型包装在接口中。此时使用类型断言可以支持你从存储在空接口中的值中取回原始类型。
类型断言用于检查接口中存储的值是否与特定类型匹配。没有类型断言时,你只能访问接口定义的方法,而不能访问原始值的字段或方法。

2.类型断言是如何工作的

如上所述,类型断言会检查接口内部的值是否与断言的类型匹配,并取回原始值。

Syntax:

value, ok := x.(OriginalType)

解析:
value:如果断言成功,存储原始类型值的变量。
ok:一个布尔值,指示断言是否成功(true)或失败(false)。

Example:

var x interface{}
x = "hello" // 将hello字符串赋值给空接口

v2, ok := x.(string) // 通过类型断言检查 x 是否包含字符串。
if ok {
fmt.Println("Assertion successful:", v2) // v2 包含字符串 "hello"
} else {
fmt.Println("Assertion failed")
}

在这个例子中,x.(string) 检查 x 是否保存了 string 类型。如果是,v2 将存储原始值,oktrue

使用K8S搭建一个Wiki

· 阅读需 13 分钟
Ryan
Cloud-Native Operations Engineer

部署WordPress知识库项目

这是一个相当复杂的配置过程,涉及多个步骤和Kubernetes资源的设置,具体的步骤如下:

步骤一:创建持久化存储

  1. NFS服务器
    • 配置并启动NFS服务器。
    • 在Kubernetes中创建一个 PersistentVolumePersistentVolumeClaim,将NFS服务器的存储卷动态绑定到 PersistentVolumeClaim(PVC)上。

步骤二:部署MySQL数据库

  1. MySQL服务
    • 使用Kubernetes部署MySQL数据库。在DeploymentStatefulSet中配置MySQL容器。
    • 使用动态PVC将MySQL的数据存储持久化到NFS上。
  2. Secrets管理
    • 创建包含MySQL凭据的Kubernetes Secret,并在MySQL Pod中使用这些凭据。

步骤三:部署WordPress

  1. WordPress服务
    • 创建WordPress的Deployment,在Pod中运行WordPress容器。
    • 使用动态PVC将WordPress的数据存储持久化到NFS上。
    • 配置WordPress Pod以使用MySQL服务。
  2. Secrets管理
    • 创建包含WordPress连接MySQL所需的凭据的Kubernetes Secret,并在WordPress Pod中使用这些凭据。

Kubernetes中的Hosts解析问题

· 阅读需 3 分钟
Ryan
Cloud-Native Operations Engineer

在不修改CoreDNS的情况下,直接在Pod中增加本地解析也是可以实现的,但这种方法有局限性,只适用于特定Pod,而且每次Pod重启或重新创建时需要重新配置。

方法1:通过hostAliases设置Pod的/etc/hosts

你可以在Pod的spec中使用hostAliases来增加本地解析。这样,当Pod启动时,会自动将指定的主机名和IP地址添加到Pod的/etc/hosts文件中。

美化终端命令行显示

· 阅读需 3 分钟
Ryan
Cloud-Native Operations Engineer

Linux命令行提示符默认是白色,很多时候不太方便查看命令和记录,而且默认是显示的完整路径,如果路径过
长,开发和看起来都不方便,所以改变一下终端命令行颜色和格式。

PS(Prompt Sign)命令提示符,PS1是Linux终端用户的一个环境变量,用来定义命令行提示符的参数。

在设定PS1环境变量时,需要用到预设的一些参数来设定PS1。

PS1的常⽤参数以及含义:

\d :代表日期,格式为weekday month date,例如:"Mon Aug 1"
\H :完整的主机名称
\h :仅取主机名中的第一个名字
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v :BASH的版本信息
\w :完整的工作目录名称
\W :利用basename取得工作目录名称,只显示最后一个目录名

:下达的第几个命令

$ :提示字符,如果是root用户,提示符为 # ,普通用户则为 $