Golang开发者招聘 @ United Internet

Golang开发者招聘 @ United Internet IONOS凭借其商业应用,是欧洲领先的主机和云应用提供商之一。凭借我们先进的技术,我们每天都能赢得来自许多不同国家的超过800万客户的信任。

您的职责

IONOS PaaS计算团队正在寻找一位积极主动且经验丰富的软件工程师。

PaaS计算团队负责为客户开发和维护托管Kubernetes服务。我们利用Kubernetes Operators来管理IONOS云基础设施,以配置和维护可靠、地理冗余的Kubernetes集群。我们负责企业客户大量节点和集群的生命周期管理,持续更新Kubernetes技术栈以及我们自己的驱动程序,例如云控制器管理器和容器存储接口。

我们的小团队负责服务的整个生命周期:我们构建它、交付它、运行它。我们正在寻找一位成员加入我们的团队,与我们一起努力提供尽可能好的产品。

您将参与的工作:

  • 主要使用Golang进行编程(Kubernetes Operators、REST API、库和工具)。
  • 设计解决方案,为客户提供新功能。
  • 开发、改进和维护完整的工具链(例如Helm Charts、Github Actions、GitOps)。
  • 自动化繁琐的任务,特别是平台的自愈机制。
  • 在自愈机制不足时,承担待命职责。

我们看重

  • 扎实的编程经验,包括编写、审查、测试和部署精心设计的代码。
  • 在云环境和Kubernetes方面有丰富的经验。
  • 具备生产环境运维和故障排除经验,包括监控、告警和日志分析。
  • 熟悉Linux操作系统。
  • 具备网络基础知识。

附加信息

  • 混合工作模式,可选择居家办公。
  • 基于信任的工作时间制度,提供灵活的工作时间。
  • 在某些地点提供补贴食堂和各种免费饮品。
  • 现代化办公空间,交通十分便利。
  • 针对活动和产品的各种员工折扣。
  • 员工活动,如夏季和冬季派对以及研讨会。
  • 大量的培训和发展机会。
  • 各种健康福利,例如体育和健康课程。

在此申请


更多关于Golang开发者招聘 @ United Internet的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你好 @pkuzak 我想提供帮助。 请查看私信。

更多关于Golang开发者招聘 @ United Internet的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这是一个非常吸引人的Golang技术职位,专注于Kubernetes Operator和云原生基础设施开发。其技术栈和职责与当前云原生领域的主流方向高度契合。

从技术角度来看,这个岗位的核心是使用Golang开发和维护Kubernetes Operator,以实现对大规模Kubernetes集群的生命周期管理。这要求开发者不仅需要精通Golang,还需要深入理解Kubernetes的扩展机制、控制器模式以及云原生生态。

以下是一个简化的Golang代码示例,展示了如何开始构建一个自定义Kubernetes Operator的基本框架,这可能是该团队日常开发工作的一部分:

package main

import (
    "context"
    "fmt"
    "time"

    corev1 "k8s.io/api/core/v1"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/apimachinery/pkg/runtime"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/rest"
    "sigs.k8s.io/controller-runtime/pkg/builder"
    "sigs.k8s.io/controller-runtime/pkg/client/config"
    "sigs.k8s.io/controller-runtime/pkg/manager"
    "sigs.k8s.io/controller-runtime/pkg/manager/signals"
    "sigs.k8s.io/controller-runtime/pkg/reconcile"
)

// MyResource 是一个自定义资源类型的示例结构
type MyResource struct {
    metav1.TypeMeta   `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`
    Spec              MyResourceSpec   `json:"spec,omitempty"`
    Status            MyResourceStatus `json:"status,omitempty"`
}

type MyResourceSpec struct {
    DesiredReplicas int32 `json:"desiredReplicas"`
}

type MyResourceStatus struct {
    AvailableReplicas int32 `json:"availableReplicas"`
}

// Reconciler 是Operator的核心协调器
type Reconciler struct {
    Client *kubernetes.Clientset
}

func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (reconcile.Result, error) {
    // 1. 通过 req.Name 和 req.Namespace 获取自定义资源
    // 2. 根据资源Spec中的期望状态,与实际集群状态进行比较
    // 3. 调用云API(如IONOS Cloud)或Kubernetes API进行调谐
    // 4. 更新资源Status字段
    
    fmt.Printf("Reconciling resource %s in namespace %s\n", req.Name, req.Namespace)
    
    // 示例:检查并确保某个Deployment的副本数符合期望
    // 这里可以集成IONOS Cloud的Go SDK来操作底层基础设施
    
    // 如果需要重新排队处理,可以返回带有Duration的Result
    return reconcile.Result{RequeueAfter: 30 * time.Second}, nil
}

func main() {
    // 1. 加载Kubernetes配置
    cfg, err := config.GetConfig()
    if err != nil {
        panic(err)
    }
    
    // 2. 创建Manager,它是Controller Runtime的核心
    mgr, err := manager.New(cfg, manager.Options{
        Scheme: runtime.NewScheme(),
        Port:   9443,
    })
    if err != nil {
        panic(err)
    }
    
    // 3. 创建Kubernetes客户端(用于直接API调用)
    kubeClient, err := kubernetes.NewForConfig(cfg)
    if err != nil {
        panic(err)
    }
    
    // 4. 创建并注册Reconciler
    reconciler := &Reconciler{
        Client: kubeClient,
    }
    
    // 5. 使用Controller Builder构建控制器
    err = builder.
        ControllerManagedBy(mgr).
        For(&MyResource{}). // 监视MyResource资源
        Complete(reconciler)
    if err != nil {
        panic(err)
    }
    
    // 6. 启动Manager
    ctx := signals.SetupSignalHandler()
    if err := mgr.Start(ctx); err != nil {
        panic(err)
    }
}

该岗位提到的“完整工具链开发”通常涉及以下Golang实践:

// 示例:一个用于自动化任务的自愈工具包
package autoscale

import (
    "encoding/json"
    "net/http"
    "time"
)

// HealingController 实现基本的自愈逻辑
type HealingController struct {
    MonitoringEndpoint string
    CloudClient        CloudAPI
}

// CheckAndHeal 定期检查集群状态并执行修复
func (hc *HealingController) CheckAndHeal() error {
    // 1. 从监控端点获取指标
    resp, err := http.Get(hc.MonitoringEndpoint)
    if err != nil {
        return err
    }
    defer resp.Body.Close()
    
    var metrics ClusterMetrics
    if err := json.NewDecoder(resp.Body).Decode(&metrics); err != nil {
        return err
    }
    
    // 2. 根据指标判断健康状态
    if metrics.NodeFailureRate > 0.1 {
        // 3. 调用云API替换故障节点
        if err := hc.CloudClient.ReplaceNode(metrics.UnhealthyNodes[0]); err != nil {
            return err
        }
    }
    
    return nil
}

// 运行自愈循环
func (hc *HealingController) RunHealingLoop(interval time.Duration) {
    ticker := time.NewTicker(interval)
    for range ticker.C {
        if err := hc.CheckAndHeal(); err != nil {
            // 记录日志并告警,符合岗位要求的监控告警职责
            logErrorToMonitoringSystem(err)
        }
    }
}

岗位中提到的“云控制器管理器”和“容器存储接口”开发,属于Kubernetes与云平台集成的核心组件,需要深入理解Kubernetes的扩展点。

这个职位对Golang开发者在云原生领域的深度和广度都有较高要求,技术挑战性强,且工作内容涉及从开发到运维的完整生命周期,对于追求技术深度的开发者是一个很好的机会。

回到顶部