我尝试了解 Kubernetes 中的 hostIP 和 hostPort。
这是我的集群配置:
3个流浪节点:
nodes = [
{ :hostname => 'k8s-master', :ip => '192.168.150.200', :ram => 4096 },
{ :hostname => 'k8s-minion1', :ip => '192.168.150.201', :ram => 4096 },
{ :hostname => 'k8s-minion2', :ip => '192.168.150.202', :ram => 4096 },
]
Run Code Online (Sandbox Code Playgroud)
我编写以下清单来测试它:
apiVersion: v1
kind: Pod
metadata:
name: firstpod
spec:
containers:
- name: container
image: nginx
ports:
- containerPort: 80
hostIP: 10.0.0.1
hostPort: 8080
Run Code Online (Sandbox Code Playgroud)
我部署的是kubectl apply -f port.yml
pod 在 k8s-minion2 上运行
kubectl get pods …Run Code Online (Sandbox Code Playgroud) 我正在使用 securityContext 进行测试,但是当我将 runAsNonRoot 设置为 true 时,我无法启动 pod。\n我使用 vagrant 以用户 abdelghani 的身份将一个 master 和两个 minion 以及 ssh 部署到主机:
\nid $USER\nuid=1001(abdelghani) gid=1001(abdelghani) groups=1001(abdelghani),27(sudo)\nRun Code Online (Sandbox Code Playgroud)\n集群信息:
\nKubernetes 版本:4.4.0-185-generic\n使用云:(不在公有云则裸机)\n安装方式:手动\n主机操作系统:ubuntu16.04.6\nCNI 及版本:\nCRI 及版本:
\napiVersion: v1\nkind: Pod\nmetadata:\n name: buggypod\nspec:\n containers:\n - name: container\n image: nginx\n securityContext: \n runAsNonRoot: true\nRun Code Online (Sandbox Code Playgroud)\n我这样做:\nkubectl apply -f pod.yml\nit 说 pod mybugypod 创建了,但是当我检查时:\nkubectl get pods\npod\xe2\x80\x99s 状态是 CreateContainerConfigError
\n我做错了什么?
\n我有一个跑步舱,我用来kubectl attach -ti mypod给他输入。
但是,我想从我的 Pod 中“分离”并返回到我的终端而不终止我的 Pod。我怎样才能做到这一点?
有没有办法直接从 kubernetes 命令行(使用 kubectl)检查在 pod 中运行的容器,以查看一些细节,例如在特权模式下运行。就像是:
kubectl inspect -c <containerName>
Run Code Online (Sandbox Code Playgroud)
我发现的唯一方法是通过 ssh 连接到托管 pod 的节点并执行,docker inspect <containerID>但这有点乏味。
我的 kubernetes 版本
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:55:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0+coreos.0", GitCommit:"6bb2e725fc2876cd94b3900fc57a1c98ca87a08b", GitTreeState:"clean", BuildDate:"2018-04-02T16:49:31Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Run Code Online (Sandbox Code Playgroud) 设以下服务:
serivce1.yml
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
type: ClusterIP
ports:
- port: 90
name: port0
targetPort: 40000
selector:
app: nginx
Run Code Online (Sandbox Code Playgroud)
我申请如下:kubectl apply -f service1.yml
现在我想更改端口部分。我可以编辑 yml 并再次应用,但我更喜欢使用 patch :
kubectl patch service service1 -p '{"spec":{"ports": [{"port": 80,"name":"anotherportspec"}]}}'
service/service1 patched
Run Code Online (Sandbox Code Playgroud)
但此命令添加一个新端口并保留旧端口:
$ kubectl describe svc service1
Name: service1
Namespace: abdelghani
Labels: <none>
Annotations: <none>
Selector: app=nginx
Type: ClusterIP
IP Families: <none>
IP: 10.98.186.21
IPs: <none>
Port: anotherportspec 80/TCP
TargetPort: 80/TCP
Endpoints: 10.39.0.3:80
Port: port0 90/TCP
TargetPort: 40000/TCP
Endpoints: …Run Code Online (Sandbox Code Playgroud)