阿里云自建k8s对接SLB

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 参考链接: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"    }
  ]
}
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
29天前
|
域名解析 移动开发 负载均衡
阿里云DNS常见问题之DNS负载均衡调加权模式失败如何解决
阿里云DNS(Domain Name System)服务是一个高可用和可扩展的云端DNS服务,用于将域名转换为IP地址,从而让用户能够通过域名访问云端资源。以下是一些关于阿里云DNS服务的常见问题合集:
|
1月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
269 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
3月前
|
Kubernetes 容器
要获取ACK(阿里云容器服务)集群中的Deployment
要获取ACK(阿里云容器服务)集群中的Deployment【1月更文挑战第8天】【1月更文挑战第40篇】
64 4
|
3月前
|
人工智能 弹性计算 调度
阿里云容器服务 ACK 产品技术动态(202312)
容器服务 Kubernetes 版 ACK 【新功能】 Feature:支持基于机密虚拟机的 AI 模型推理保护 ACK 现已支持将基于 Intel® Trusted Domain Extension(Intel® TDX)技术的 ECS 实例加入 TDX 机密虚拟机计算节点池,使集群具备 TDX 机密计算能力,实现 AI 模型的可信推理和微调,保障模型数据的机密性与完整性。结合 PyTorch 与 Intel® AMX指令集,您可以在 32 核实例上实现秒级出图的推理能力。
419 1
|
24天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
17 0
|
1月前
|
负载均衡 Cloud Native 网络协议
阿里云负载均衡SLB
阿里云负载均衡SLB支持以下类型的负载均衡
55 3
|
2月前
新版阿里云内容安全对接
新版阿里云内容安全对接
66 1
|
2月前
对接阿里云RTC
对接阿里云RTC
31 0
|
3月前
|
Kubernetes 容器
阿里云OpenAPI咋取到ack集群的Deployment呀?
阿里云OpenAPI咋取到ack集群的Deployment呀?【1月更文挑战第17天】【1月更文挑战第84篇】
22 2

推荐镜像

更多