阿里云自建k8s对接SLB

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 参考链接:https://github.com/kubernetes/cloud-provider-alibaba-cloud/blob/master/docs/getting-started.md


https://github.com/kubernetes/cloud-provider-alibaba-cloud/blob/master/docs/getting-started.md

1.创建ccm用到的cm

mkdir slb
cd slb
AccessKeyID=
AcceessKeySecret=
AccessKeyID-base64=`echo -n "$AccessKeyID" |base64`
AcceessKeySecret-base64=`echo -n "$AcceessKeySecret"|base64`
vim cloud-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:  name: cloud-config
  namespace: kube-system
data:  cloud-config.conf: |-
{        "Global": {            "accessKeyID": "$AccessKeyID",            "accessKeySecret": "$AcceessKeySecret-base64"}}kubectl apply -f cloud-config.yaml

2.获取ccm用到的元数据

curl100.100.100.200/latest/meta-data/hostname
curl100.100.100.200/latest/meta-data/instance-id
vim /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment="KUBELET_CLOUD_PROVIDER_ARGS=--cloud-provider=external --hostname-override=iZj6c3ydyj9t4ztmha08rbZ --provider-id=cn-hongkong.i-j6c3ydyj9t4ztmha08rb"Environment="--system-reserved=memory=300Mi --kube-reserved=memory=400Mi --eviction-hard=imagefs.available<15%,memory.available<300Mi,nodefs.available<10%,nodefs.inodesFree<5% --cgroup-driver=systemd"$KUBELET_CLOUD_PROVIDER_ARGS$KUBELET_CGROUP_ARGSsystemctl daemon-reload
systemctl restart kubelet

3.修改kube-apiserver

vim /etc/kubernetes/manifests/kube-apiserver.yaml
---cloud-provider=external

4.获取证书

cat /etc/kubernetes/pki/ca.crt|base64 -w 0
vim /etc/kubernetes/cloud-controller-manager.conf
kind: Config
contexts:- context:    cluster: kubernetes
    user: system:cloud-controller-manager
  name: system:cloud-controller-manager@kubernetes
current-context: system:cloud-controller-manager@kubernetes
users:- name: system:cloud-controller-manager
  user:    tokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
apiVersion: v1
clusters:- cluster:    certificate-authority-data: $ca.crt
    server: https://172.16.1.193:6443  name: kubernetes

5.创建ds

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:  name: system:cloud-controller-manager
rules:  - apiGroups:      - ""    resources:      - events
    verbs:      - create
      - patch
      - update
  - apiGroups:      - ""    resources:      - nodes
    verbs:      - get
      - list
      - watch
      - delete
      - patch
      - update
  - apiGroups:      - ""    resources:      - nodes/status
    verbs:      - patch
      - update
  - apiGroups:      - ""    resources:      - services
    verbs:      - get
      - list
      - watch
      - update
      - patch
  - apiGroups:      - ""    resources:      - services/status
    verbs:      - update
      - patch
  - apiGroups:    - ""    resources:    - serviceaccounts
    verbs:    - create
  - apiGroups:      - ""    resources:      - endpoints
    verbs:      - get
      - list
      - watch
      - create
      - patch
      - update
  - apiGroups:      - coordination.k8s.io
    resources:      - leases
    verbs:      - get
      - list
      - update
      - create
  - apiGroups:      - apiextensions.k8s.io
    resources:      - customresourcedefinitions
    verbs:      - get
      - update
      - create
      - delete
---apiVersion: v1
kind: ServiceAccount
metadata:  name: cloud-controller-manager
  namespace: kube-system
---kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:  name: system:cloud-controller-manager
roleRef:  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:cloud-controller-manager
subjects:- kind: ServiceAccount
  name: cloud-controller-manager
  namespace: kube-system
---apiVersion: apps/v1
kind: DaemonSet
metadata:  labels:    app: cloud-controller-manager
    tier: control-plane
  name: cloud-controller-manager
  namespace: kube-system
spec:  selector:    matchLabels:      app: cloud-controller-manager
      tier: control-plane
  updateStrategy:    rollingUpdate:      maxUnavailable: 1    type: RollingUpdate
  template:    metadata:      labels:        app: cloud-controller-manager
        tier: control-plane
      annotations:        scheduler.alpha.kubernetes.io/critical-pod: ""    spec:      serviceAccountName: cloud-controller-manager
      tolerations:      - operator: Exists
      nodeSelector:        node-role.kubernetes.io/master: ""      containers:      - name: cloud-controller-manager
        securityContext:          readOnlyRootFilesystem: true          allowPrivilegeEscalation: false          runAsNonRoot: true          runAsUser: 1200         command:        -  /cloud-controller-manager
        - --kubeconfig=/etc/kubernetes/cloud-controller-manager.conf
        - --cloud-config=/etc/kubernetes/config/cloud-config.conf
        - --metrics-bind-addr=0
#For terway configuration        - --configure-cloud-routes=false
        image: registry-vpc.cn-shanghai.aliyuncs.com/acs/cloud-controller-manager-amd64:v2.0.1
        livenessProbe:          failureThreshold: 8          httpGet:            host: 127.0.0.1            path: /healthz
            port: 10258            scheme: HTTP
          initialDelaySeconds: 15          timeoutSeconds: 15        resources:          requests:            cpu: 100m
            memory: 200Mi
          limits:            cpu: 1000m
            memory: 1Gi
        volumeMounts:        - mountPath: /etc/kubernetes/cloud-controller-manager.conf
          name: k8s
          readOnly: true        - name: cloud-config
          mountPath: /etc/kubernetes/config
      hostNetwork: true      volumes:      - hostPath:          path: /etc/kubernetes/cloud-controller-manager.conf
          type: File
        name: k8s
      - name: cloud-config
        configMap:          name: cloud-config
          items:          - key: cloud-config.conf
            path: cloud-config.conf

6.验证

由于是单节点集群测试,故使用local模式的流量策略

[root@izj6c3ydyj9t4ztmha08rbz slb]# kubectl get svc nginx -o yaml
apiVersion: v1
kind: Service
metadata:  creationTimestamp: "2021-11-18T22:36:48Z"  finalizers:  - service.k8s.alibaba/resources
  labels:    app: nginx
    service.beta.kubernetes.io/hash: 73b160d328a26d99ed855f80117a95610f38768c282bc4bc5606bdc3
  name: nginx
  namespace: default
  resourceVersion: "12502"  uid: 9c897582-0484-41b8-b983-32626599b4c1
spec:  allocateLoadBalancerNodePorts: true  clusterIP: 10.98.194.116  clusterIPs:  - 10.98.194.116
  externalTrafficPolicy: Local
  healthCheckNodePort: 30738  internalTrafficPolicy: Cluster
  ipFamilies:  - IPv4
  ipFamilyPolicy: SingleStack
  ports:  - nodePort: 32093    port: 80    protocol: TCP
    targetPort: 80  selector:    app: nginx
  sessionAffinity: None
  type: LoadBalancer
status:  loadBalancer:    ingress:    - ip: 47.242.151.91

7.访问测试

7.1 node节点访问

7.2 pod访问

7.3 查看日志

8.ram权限

ps: 如果是ram用户需要授权如下策略

{
"Version": "1",
"Statement": [
    {
"Action": [
"ecs:Describe*",
"ecs:AttachDisk",
"ecs:CreateDisk",
"ecs:CreateSnapshot",
"ecs:CreateRouteEntry",
"ecs:DeleteDisk",
"ecs:DeleteSnapshot",
"ecs:DeleteRouteEntry",
"ecs:DetachDisk",
"ecs:ModifyAutoSnapshotPolicyEx",
"ecs:ModifyDiskAttribute",
"ecs:CreateNetworkInterface",
"ecs:DescribeNetworkInterfaces",
"ecs:AttachNetworkInterface",
"ecs:DetachNetworkInterface",
"ecs:DeleteNetworkInterface",
"ecs:DescribeInstanceAttribute"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"cr:Get*",
"cr:List*",
"cr:PullRepository"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"slb:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"cms:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"vpc:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"log:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    },
    {
"Action": [
"nas:*"      ],
"Resource": [
"*"      ],
"Effect": "Allow"    }
  ]
}
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2天前
|
供应链 安全 Cloud Native
阿里云飞天企业版获【可信云·容器平台安全能力】先进级认证
阿里云飞天企业版容器系列产品获中国信息通信研究院【可信云·容器平台安全能力】先进级认证,这是飞天企业版容器产品获得《等保四级PaaS平台》和《 云原生安全配置基线规范V2.0》之后,本年度再一次获得行业权威认可,证明飞天企业版的容器解决方案具备符合行业标准的最高等级容器安全能力。
阿里云飞天企业版获【可信云·容器平台安全能力】先进级认证
|
25天前
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
11天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
3天前
|
负载均衡 容灾 Cloud Native
云原生应用网关进阶:阿里云网络ALB Ingress 全能增强
在过去半年,ALB Ingress Controller推出了多项高级特性,包括支持AScript自定义脚本、慢启动、连接优雅中断等功能,增强了产品的灵活性和用户体验。此外,还推出了ingress2Albconfig工具,方便用户从Nginx Ingress迁移到ALB Ingress,以及通过Webhook服务实现更智能的配置校验,减少错误配置带来的影响。在容灾部署方面,支持了多集群网关,提高了系统的高可用性和容灾能力。这些改进旨在为用户提供更强大、更安全的云原生网关解决方案。
36 4
|
26天前
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
25天前
|
Kubernetes 算法 调度
阿里云 ACK FinOps成本优化最佳实践
本文源自2024云栖大会梁成昊演讲,讨论了成本优化策略的选择与实施。文章首先介绍了成本优化的基本思路,包括优化购买方式、调整资源配置等基础策略,以及使用弹性、资源混部等高级策略。接着,文章详细探讨了集群优化和应用优化的具体方法,如使用抢占式实例降低成本、通过资源画像识别并优化资源配置,以及利用智能应用弹性策略提高资源利用效率。
|
25天前
|
弹性计算 调度 数据中心
阿里云 ACK One 注册集群云上弹性:扩展业务新利器
随着企业数字化转型深入,传统IDC数据中心因物理容量限制,难以实现动态扩容,缺乏弹性能力。阿里云ACK One注册集群凭借其高度灵活性和丰富资源选择,成为解决此问题的最佳方案。通过与阿里云资源的整合,ACK One不仅实现了计算资源的按需扩展,提高了资源利用率,还通过按需付费模式降低了成本,使企业能够更高效地应对业务增长和高峰需求。
|
25天前
|
运维 Kubernetes Serverless
阿里云Argo X K8s玩转工作流引擎,实现大规模并行计算
本文基于2024云栖大会田双坤的演讲,介绍了Kubernetes作为云原生操作系统的角色及其在各类任务中的应用,重点探讨了Argo Workflows在Kubernetes上编排并行任务的能力。面对自建Argo Workflows的挑战,如稳定性、成本和安全性等问题,阿里巴巴云推出了全托管的Serverless Argo工作流,提供全托管、免运维、可观测和易集成的特点,显著提升了任务编排的效率和稳定性。适用于数据处理、科学计算、自动驾驶仿真等多个领域。
|
25天前
|
Kubernetes 容灾 调度
阿里云 ACK 高可用稳定性最佳实践
本文整理自2024云栖大会刘佳旭的演讲,主题为《ACK高可用稳定性最佳实践》。文章探讨了云原生高可用架构的重要性,通过Kubernetes的高可用案例分析,介绍了ACK在单集群高可用架构设计、产品能力和最佳实践方面的方法,包括控制面和数据面的高可用策略、工作负载高可用配置、企业版容器镜像服务高可用配置等内容,旨在帮助企业构建更加可靠和高效的应用运行环境。
|
25天前
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。

热门文章

最新文章