我在kops配置的AWS集群上测试了kubernetes部署和EBS卷安装.这是部署yml文件:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: helloworld-deployment-volume
spec:
replicas: 1
template:
metadata:
labels:
app: helloworld
spec:
containers:
- name: k8s-demo
image: wardviaene/k8s-demo
ports:
- name: nodejs-port
containerPort: 3000
volumeMounts:
- mountPath: /myvol
name: myvolume
volumes:
- name: myvolume
awsElasticBlockStore:
volumeID: <volume_id>
Run Code Online (Sandbox Code Playgroud)
之后kubectl create -f <path_to_this_yml>,我在pod描述中收到以下消息:
Attach failed for volume "myvolume" : Error attaching EBS volume "XXX" to instance "YYY": "UnauthorizedOperation: You are not authorized to perform this operation. status code: 403
Run Code Online (Sandbox Code Playgroud)
看起来这只是一个权限问题.好的,我检查了节点角色的策略IAM- > Roles- …
我有一个非常简单的 Kubernetes pod。我想要一个有状态的集合并想要以下过程:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: app
namespace: test
labels:
name: app
spec:
serviceName: app
replicas: 1
selector:
matchLabels:
app: app
template:
metadata:
labels:
app: app
spec:
initContainers:
- name: preparing
image: alpine:3.8
imagePullPolicy: IfNotPresent
command:
- "sh"
- "-c"
- |
echo "Downloading data"
wget https://s3.amazonaws.com/.........
tar -xvzf xxxx-........ -C /root/
volumeMounts:
- name: node-volume
mountPath: /root/data/
containers:
- name: main-container
image: ecr.us-west-2.amazonaws.com/image/:latest
imagePullPolicy: Always
volumeMounts: …Run Code Online (Sandbox Code Playgroud) 我通过 Kops 创建了一个 Kubernetes 集群。配置和 ssh 密钥位于我无法再访问的机器中。即使我丢失了密钥,是否可以通过 kops ssh 到节点?我看到有一个命令 -
警察得到秘密
这给了我所有的秘密。我可以使用它来获得对节点的 ssh 访问权限以及如何操作吗?
我看到集群状态存储在 S3 中。它也存储密钥吗?
我已经使用kops启动了kubernetes集群。查找工作正常,我开始遇到以下问题:
kubectl get pods
The connection to the server localhost:8080 was refused - did you specify the right host or port?
Run Code Online (Sandbox Code Playgroud)
我该如何解决?看来kubernetes-apiserver没有运行,我该如何运行?
kubectl run nginx --image=nginx:1.10.0
error: failed to discover supported resources: Get http://localhost:8080/apis/apps/v1beta1?timeout=32s: dial tcp 127.0.0.1:8080: connect: connection refused
Run Code Online (Sandbox Code Playgroud)
请建议
我是 kubernetes 的新手,我正在尝试使用 Kops 在 aws 中创建一个新集群。不幸的是,如果不指定 dns-zone,我似乎无法继续,当我出于相同目的使用 docker-machine 和 docker swarm 等工具时,我从未需要这样做。此外,我不需要也不想要 Route53 之类的服务。
因此,我的问题是如何在 aws 中创建 kubernetes 集群而不必担心 dns 区域和路由 53?
谢谢
集群升级后,三个主节点之一无法连接回集群。我有一个 HA 集群在 us-east-1a、us-east-1b 和 us-east-1c 中运行,在 us-east-1a 中运行的 master 无法重新加入集群。
我尝试将 master-us-east-1a 实例组缩小到零个节点,然后将其恢复到一个节点,但 EC2 机器启动时出现同样的问题,无法再次加入到集群,似乎是从备份启动的或者其他的东西。
我尝试连接到master来重新启动服务,可能是protukube或docker,但我也无法解决问题。
通过主服务器中的 ssh 连接,我注意到 flannel 服务没有在这台机器上运行。我尝试通过 docker 手动运行但没有成功。看来 flannel 是应该运行的网络服务,但没有运行。
提前致谢。
附件
> kubectl get nodes
NAME STATUS ROLES AGE VERSION
ip-xxx-xxx-xxx-xxx.ec2.internal Ready node 33d v1.11.9
ip-xxx-xxx-xxx-xxx.ec2.internal Ready master 33d v1.11.9
ip-xxx-xxx-xxx-xxx.ec2.internal Ready node 33d v1.11.9
ip-xxx-xxx-xxx-xxx.ec2.internal Ready master 33d v1.11.9
ip-xxx-xxx-xxx-xxx.ec2.internal Ready node 33d v1.11.9
Run Code Online (Sandbox Code Playgroud)
-
> sudo systemctl status kubelet
Jan 10 …Run Code Online (Sandbox Code Playgroud) 我有一个kubernetes集群,其中设置了kops 1.5,然后升级到1.6.2.我正在尝试使用PodPresets.文档声明了以下要求:
- 您已启用api类型settings.k8s.io/v1alpha1/podpreset
- 您已启用准入控制器PodPreset
- 您已定义了pod预设
我看到1.6.x,第一个是照顾(我怎么验证?).我怎么能申请第二个?我可以看到群集中有三个kube-apiserver-*pod(我想它是3个az).我想我可以从kubernetes仪表板编辑他们的yaml配置,并将PodPreset添加到permit-control字符串中.但有没有更好的方法来实现这一目标?
使用kubectl和kops 1.8
当aws使用创建kops的客户端证书(在client-certificate-data字段中 显示为字符串~/.kube/config)旋转集群时,具有以下值:
Subject: O=system:masters, CN=kubecfg
Run Code Online (Sandbox Code Playgroud)
除非我错了,从 开始kubernetes 1.4,Organitazion的值被解释为group信息(与CN值相关联的字符串就是所谓的用户,因为k8s本质上没有这样的概念)
1:如何查看与system:masters组和/或kubecfg用户相关联的权限?
RBAC? 我该如何检查?2:为什么在我的项目~/.kube/config做不包含一个kubecfg用户?(而是一个带有我的集群名称的用户和另一个名为的用户admin?)
$ kubectl config view
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: REDACTED
server: <server_url>
name: <my_cluster_name>
contexts:
- context:
cluster: <my_cluster_name>
user: <my_cluster_name>
name: <my_cluster_name>
current-context: <my_cluster_name>
kind: Config
preferences: …Run Code Online (Sandbox Code Playgroud) 我在 AWS 中安装了一个带有 Kops 的 Kubernetes 集群。我已经使用 Gitlab UI 安装了 Helm Tiller。Tiller 服务似乎通过 Gitlab 工作,例如我已经从 Gitlab UI 安装了 Ingress。
但是当我尝试从我的 CLI 中使用同一个 Tiller 时,我无法让它工作。当我helm init说它已经安装时(这是完全有道理的):
helm init --tiller-namespace gitlab-managed-apps --service-account tiller
$HELM_HOME has been configured at C:\Users\danie\.helm.
Warning: Tiller is already installed in the cluster.
(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)
Happy Helming!
Run Code Online (Sandbox Code Playgroud)
但是,例如,当尝试列出图表时,它需要 5 分钟然后超时:
$ helm list --tiller-namespace gitlab-managed-apps --debug
[debug] Created tunnel using local port: '60471' …Run Code Online (Sandbox Code Playgroud) 我正在尝试为Kubernetes附加可虚拟连接的FlexVolume示例,该示例似乎根据我在节点和主节点上的日志正常初始化:
Loaded volume plugin "flexvolume-k8s/dummy-attachable
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将卷附加到Pod上时,主方法永远不会调用attach方法。来自节点的日志显示为:
flexVolume driver k8s/dummy-attachable: using default GetVolumeName for volume dummy-attachable
operationExecutor.VerifyControllerAttachedVolume started for volume "dummy-attachable"
Operation for "\"flexvolume-k8s/dummy-attachable/dummy-attachable\"" failed. No retries permitted until 2019-04-22 13:42:51.21390334 +0000 UTC m=+4814.674525788 (durationBeforeRetry 500ms). Error: "Volume has not been added to the list of VolumesInUse in the node's volume status for volume \"dummy-attachable\" (UniqueName: \"flexvolume-k8s/dummy-attachable/dummy-attachable\") pod \"nginx-dummy-attachable\"
Run Code Online (Sandbox Code Playgroud)
这是我尝试挂载卷的方式:
apiVersion: v1
kind: Pod
metadata:
name: nginx-dummy-attachable
namespace: default
spec:
containers:
- name: …Run Code Online (Sandbox Code Playgroud) kops ×10
kubernetes ×10
amazon-ec2 ×2
kubectl ×2
devops ×1
docker ×1
etcd ×1
flannel ×1
gitlab ×1
statefulset ×1