如何使用云盘
aws ebs
设置IAM角色并分配到机器上
具有controlplane(控制面板)角色的节点的IAM策略:
1 | { |
worker角色的节点的IAM策略
1 | { |
配置ClusterID
需要在机器上打上标签,如果不配置会产生以下错误
1 | failed to run Kubelet: could not init cloud provider "aws": AWS cloud failed to find ClusterID |
标 签 Key : kubernetes.io/cluster/CLUSTERID
标签Value: owned
CLUSTERID
可以为任何值
kubernetes配置
需要kube-apiserver, kube-controller-manager以及kubelet 启动加上 --cloud-provider=aws
参数 , 注意
需要在所有node上的kubelet 开启--cloud-provider=aws
使用kubeadm 初始化kubernetes设置1
2
3
4
5
6
7
8
9
10apiServerExtraArgs:
cloud-provider: aws
controllerManagerExtraArgs:
cloud-provider: aws
nodeRegistration:
#建议将Kubelet的名称设置为EC2中节点的私有DNS条目(这可确保它与主机名匹配,如本文前面所述)
name: ip-10-15-30-45.cn-northwest-1.compute.internal
kubeletExtraArgs:
cloud-provider: aws
使用kubeadm 命令安装后的情况下
kube-apiserver
修改/etc/kubernetes/manifests/kube-apiserver.yaml
下的启动参数kube-controller-manager
修改/etc/kubernetes/manifests/kube-controller-manager.yaml
下的启动参数kubelet
修改/etc/systemd/system/kubelet.service.d/10-kubeadm.conf
下的启动参数
开始使用EBS
创建StorageClass
1 | # cat standard-storageclass.yaml |
创建PVC
1 | # cat nginx-pv-claim.yaml |
Pod
1 | # cat nginx-pv-pod.yaml |
参考链接
- https://www.kubernetes.org.cn/4078.html
- https://kubernetes.io/docs/concepts/storage/storage-classes/#aws
- https://blog.scottlowe.org/2018/09/28/setting-up-the-kubernetes-aws-cloud-provider/
阿里云云盘
创建阿里云Provisioner 控制器
1 | kind: StorageClass |
创建PVC
1 | kind: PersistentVolumeClaim |
效果
1 | # kubectl get pvc |
参考链接
- https://yq.aliyun.com/articles/629001
- https://github.com/AliyunContainerService/alicloud-storage-provisioner
IAM 使用
kube2iam in aws iam
通过AWS IAM创建一个名为kube2iam的策略
,策略规则如下
1 | { |
通过AWS IAM创建一个名为:node-k8s-role的角色
,并将kube2iam
的策略
赋予它,注意!!同时将这个角色赋予到机器上
通过AWS IAM创建一个名为:k8s-kube2iam-demo的角色
,将AmazonS3FullAccess
的策略
赋予它,同时编辑信任关系,调整为如下:
1 | { |
部署kube2iam
1 | # Source: kube2iam/templates/serviceaccount.yaml |
测试pod
1 | apiVersion: apps/v1 |
云应用疑难杂症
使用云负载均衡器代理APIServer问题
阿里云/AWS的负载均衡是四层TCP负责,不支持后端ECS实例既作为Real Server又作为客户端向所在的负载均衡实例发送请求。因为返回的数据包只在云服务器内部转发,不经过负载均衡,所以在后端ECS实例上去访问负载均衡的服务地址是不通的。什么意思?就是如果你要使用阿里云的SLB的话,那么你不能在apiserver节点上使用SLB(比如在apiserver 上安装kubectl,然后将apiserver的地址设置为SLB的负载地址使用),因为这样的话就可能造成回环了,所以简单的做法是另外用两个新的节点做HA实例,然后将这两个实例添加到SLB 机器组中。
- aws 使用nlb,指定ip
- aliyun 在apiserver上搭建keepalived