跳到主要内容

37.tcp

PR #735

Add TCP socket based health checking.

type TCPHealthChecker struct{}

func (t *TCPHealthChecker) HealthCheck(currentState api.PodState, container api.Container) (Status, error) {
params := container.LivenessProbe.TCPSocket
if params == nil {
return Unknown, fmt.Errorf("error, no TCP parameters specified: %v", container)
}
if len(currentState.PodIP) == 0 {
return Unknown, fmt.Errorf("no host specified.")
}
conn, err := net.Dial("tcp", net.JoinHostPort(currentState.PodIP, strconv.Itoa(params.Port)))
if err != nil {
return Unhealthy, nil
}
err = conn.Close()
if err != nil {
glog.Errorf("unexpected error closing health check socket: %v (%#v)", err, err)
}
return Healthy, nil
}

PR #715

structured message for selector; matching functionality

// Operator represents a key's relationship
// to a set of values in a Requirement.
// TODO: Should also represent key's existence.
type Operator int

const (
IN Operator = iota + 1
NOT_IN
)

// LabelSelector only not named 'Selector' due
// to name conflict until Selector is deprecated.
type LabelSelector struct {
Requirements []Requirement
}

type Requirement struct {
key string
operator Operator
strValues util.StringSet
}

func (r *Requirement) Matches(ls Labels) bool {
switch r.operator {
case IN:
return r.strValues.Has(ls.Get(r.key))
case NOT_IN:
return !r.strValues.Has(ls.Get(r.key))
default:
return false
}
}

func (sg *LabelSelector) Matches(ls Labels) bool {
for _, req := range sg.Requirements {
if !req.Matches(ls) {
return false
}
}
return true
}

这段代码定义了一个标签选择器(LabelSelector),它是Kubernetes中用于过滤对象(例如Pod)的一种机制。基于某种规则,标签选择器能确定某个对象是否满足要求。

首先,Operator 类型用来表示标签键(key)与一组值之间的关系,即在一个Requirement(需求)中,键应该如何与值集合相关联。IN 和 NOT_IN 两个操作符分别表示键的值是否在指定的值集合中,或者不在指定的值集合中。

然后,Requirement 结构体用来表示一个需求,它由一个键(key),一个操作符(operator)和一组字符串值(strValues)组成。

Matches 方法用于判断给定的标签集(Labels)是否满足需求。如果操作符是 IN,那么只要标签集中对应键的值在 strValues 中,就认为满足需求。如果操作符是 NOT_IN,那么只要标签集中对应键的值不在 strValues 中,就认为满足需求。如果操作符不是 IN 或 NOT_IN,则返回 false。

LabelSelector 结构体用来表示一个标签选择器,它由一组需求(Requirements)组成。

Matches 方法用于判断给定的标签集(Labels)是否满足所有的需求。只要有一个需求不满足,就返回 false。如果所有需求都满足,就返回 true。

PR#739

Add logo files (.svg, .pdf, .png)

PR #737

Make updates atomic from the client side. [客户端先获取版本,设置后再调用 update]

PR #756

Expose an Encoding/Versioning interface for use with etcd