本文的目的是介绍docker和kubernetes中hostname的使用和常见问题的详细情况,特别关注dockerhostname的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现
本文的目的是介绍docker和kubernetes中hostname的使用和常见问题的详细情况,特别关注docker hostname的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解docker和kubernetes中hostname的使用和常见问题的机会,同时也不会遗漏关于ASPNETCORE_ENVIRONMENT env变量传入docker和kubernetes、cgroup, docker,和kubernetes、Docker Compose和Kubernetes有什么区别?、docker for mac 安装 kubernetes、kubernetes dashboard的知识。
本文目录一览:- docker和kubernetes中hostname的使用和常见问题(docker hostname)
- ASPNETCORE_ENVIRONMENT env变量传入docker和kubernetes
- cgroup, docker,和kubernetes
- Docker Compose和Kubernetes有什么区别?
- docker for mac 安装 kubernetes、kubernetes dashboard
docker和kubernetes中hostname的使用和常见问题(docker hostname)
原文: docker和kubernetes中hostname的使用和常见问题hostname在docker中是使用UTS namespace进行隔离的。docker中主要有两种ns的用法,
- 一种是
docker run --uts="" busybox
。这种会新创建一个新的uts ns。 - 一种是
docekr run --uts="host" busybox
。这种创建的容器将会使用物理机的uts ns。
在k8s中,是这样处理的uts的ns的:
func modifyHostNetworkOptionForContainer(hostNetwork bool, sandboxID string, hc *dockercontainer.HostConfig) {
sandboxNSMode := fmt.Sprintf("container:%v", sandboxID)
hc.NetworkMode = dockercontainer.NetworkMode(sandboxNSMode)
hc.IpcMode = dockercontainer.IpcMode(sandboxNSMode)
hc.UTSMode = ""
if hostNetwork {
hc.UTSMode = namespaceModeHost
}
}
这里我们可以关注几个事情:
pause容器和应用容器都是使用独自的uts namespace。应用容器之间也都是使用独立的namespace,因此任何一个容器启动后修改hostname并不会影响到其他的容器。
如果判断是使用物理机网络就是hostNetwork,则会将uts的mode设置为"host",也就是使用物理机的uts ns。
因此这时候容器修改hostname,也会影响到物理机。
当然,容器如果想要修改hostname(通过hostname命令),需要privileged权限才可以。
修改后容器直接重启会导致恢复原来的hostname。这个的主要原因是重启会导致重新创建新的uts namespace。
当然,如果容器重建了,比如exit后又被kubelet创建了一个新的容器,则hostname会再次恢复。
一个pod内有两个容器,两个容器修改hostname并不会彼此影响,因为他们的uts namespace是各自独立的。
通过修改/etc/hostname的方式动态修改运行容器的hostname无效。
以下是完整实验过程:
//容器启动时hostname为busyboxtest
[root@node ~]# docker exec 6f5 hostname
busyboxtest
//修改/etc/hostname文件
[root@node ~]# docker exec 6f5 cat /etc/hostname
busyboxtest123
[root@node ~]# docker exec 6f5 hostname test123
//修改后查看hostname为test123
[root@node ~]# docker exec 6f5 hostname
test123
[root@node ~]# docker inspect 6f5|grep Pid
"Pid": 15818,
[root@node ~]# ll /proc/15818/ns/
total 0
lrwxrwxrwx 1 root root 0 Jan 10 16:16 ipc -> ipc:[4026535715]
lrwxrwxrwx 1 root root 0 Jan 10 16:16 mnt -> mnt:[4026535789]
lrwxrwxrwx 1 root root 0 Jan 10 16:16 net -> net:[4026535718]
lrwxrwxrwx 1 root root 0 Jan 10 16:16 pid -> pid:[4026535791]
lrwxrwxrwx 1 root root 0 Jan 10 16:18 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Jan 10 16:16 uts -> uts:[4026535790]
//重启容器
[root@node ~]# docker restart 6f5
6f5
[root@node ~]# docker inspect 6f5|grep Pid
"Pid": 17553,
//可以看到uts的namespace变化了
[root@node ~]# ll /proc/17553/ns/
total 0
lrwxrwxrwx 1 root root 0 Jan 10 16:19 ipc -> ipc:[4026535715]
lrwxrwxrwx 1 root root 0 Jan 10 16:19 mnt -> mnt:[4026535341]
lrwxrwxrwx 1 root root 0 Jan 10 16:19 net -> net:[4026535718]
lrwxrwxrwx 1 root root 0 Jan 10 16:19 pid -> pid:[4026535714]
lrwxrwxrwx 1 root root 0 Jan 10 16:19 user -> user:[4026531837]
lrwxrwxrwx 1 root root 0 Jan 10 16:19 uts -> uts:[4026535713]
//hostname恢复
[root@node ~]# docker exec 6f5 hostname
busyboxtest
[root@node ~]# docker exec 6f5 cat /etc/hostname
busyboxtest123
ASPNETCORE_ENVIRONMENT env变量传入docker和kubernetes
很抱歉,但是在您的问题中,您缺少许多详细信息,例如DOCKERFILE或kubernetes yaml配置文件。但是,根据您的写意,我相信article是您的答案。
简而言之,它可能会将appsettings文件移开一点,因为它们可能包含秘密,因此它们不应进入docker映像。而不是用头盔表代替,您将您的秘密作为参数传递。因此,肯定是Build Once,Deploy Everywhere
方法。
cgroup, docker,和kubernetes
0. cgroups
跑一个耗cpu的脚本
x=0
while [ True ];do
x=$x+1
done;
top可以看到这个脚本基本占了100%的cpu资源
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
30142 root 20 0 104m 2520 1024 R 99.7 0.1 14:38.97 sh
下面用cgroups控制这个进程的cpu资源
mkdir -p /cgroup/cpu/foo/ #新建一个控制组foo
echo 50000 > /cgroup/cpu/foo/cpu.cfs_quota_us #将cpu.cfs_quota_us设为50000,相对于cpu.cfs_period_us的100000是50%
echo 30142 > /cgroup/cpu/foo/tasks
然后top的实时统计数据如下,cpu占用率将近50%,看来cgroups关于cpu的控制起了效果
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 30142 root 20 0 105m 2884 1024 R 49.4 0.2 23:32.53 sh
cpu控制组foo下面还有其他的控制,还可以做更多其他的关于cpu的控制
[root@localhost ~]# ls /cgroup/cpu/foo/
cgroup.event_control cgroup.procs cpu.cfs_period_us cpu.cfs_quota_us cpu.rt_period_us cpu.rt_runtime_us cpu.shares cpu.stat notify_on_release tasks
1. docker
docker run --help | grep cgroup
--cgroup-parent string Optional parent cgroup for the container
这个参数指定的cgroup的配置文件的位置,指定位置run后
# docker run --cgroup-parent "/" nginx
localhost:/sys/fs/cgroup/cpu # ls
cgroup.clone_children cpuacct.stat cpu.cfs_quota_us cpu.stat notify_on_release user.slice
cgroup.event_control cpuacct.usage cpu.rt_period_us docker release_agent
cgroup.procs cpuacct.usage_percpu cpu.rt_runtime_us f296b0316c259262e78110174f3b4a7329b026af99a14730f11cc0f215be9741 system.slice
cgroup.sane_behavior cpu.cfs_period_us cpu.shares foo tasks
localhost:/sys/fs/cgroup/cpu # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f296b0316c25 nginx "/entrypoint.sh" 2 minutes ago Up 2 minutes berserk_mclean
其中 f296b0316c25
这个目录就是创建的这个容器的cgroup控制目录
如果--cgroup-parent
没有设置为/
, 那么控制目录应该在 /sys/fs/cgroup/cpu/docker/
下
2. kubernetes控制
kubelet也提供了这个参数,用于定义pod的容器启动的cgroup控制
定义pod
localhost:/tmp/manifest # cat aa.manifest
# Copy of pod.yaml without file extension for test
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
用kubelet裸启动
kubelet --cgroup-root=/ --config /tmp/manifest/
localhost:/sys/fs/cgroup/cpu/docker # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1adc2179227f nginx "nginx -g ''daemon off" 1 seconds ago Up Less than a second k8s_nginx.156efd59_nginx-localhost_default_0539f3e7389c317750cd6a23a5509685_8a29cc5d
902c8aa23657 gcr.io/google_containers/pause-amd64:3.0 "/pause" 4 seconds ago Up 3 seconds k8s_POD.b2390301_nginx-localhost_default_0539f3e7389c317750cd6a23a5509685_24406b11
观察cgroup的根目录位置
localhost:/sys/fs/cgroup/cpu # ls
1adc2179227fa461ac349357b7fde73fdd47636b868aa5403875d79ca33d584b cgroup.procs cpuacct.usage_percpu cpu.rt_runtime_us foo tasks
902c8aa236578d11bc8d97f4a7cfb72465fad1fdca0a6752735191d5638b5460 cgroup.sane_behavior cpu.cfs_period_us cpu.shares notify_on_release user.slice
cgroup.clone_children cpuacct.stat cpu.cfs_quota_us cpu.stat release_agent
cgroup.event_control cpuacct.usage cpu.rt_period_us docker system.slice
看到1adc了,同时也可以 pause容器的ID, 证明了这个选项起作用了。
Docker Compose和Kubernetes有什么区别?
如何解决Docker Compose和Kubernetes有什么区别??
:
- Docker是一种容器技术,可让您对应用程序进行容器化。
- Docker是使用其他技术的核心。
- Docker Compose允许配置和启动多个Docker容器。
- 当您要启动多个Docker容器并且不想使用单独启动每个Docker容器时,Docker Compose通常用作帮助程序
docker run ...
。 - Docker Compose用于在 主机上启动容器。
- 在构建和运行单个Docker 容器时,使用Docker Compose 。
- Docker Swarm用于在 主机上运行和连接容器。
- Docker Swarm是一个容器集群管理和编排工具。
- 它管理在多个主机上运行的容器,并执行扩展,在发生崩溃时启动新容器,将容器联网等操作。
- Docker Swarm是生产中的Docker。它是嵌入在Docker引擎中的 Docker 。
- 名为堆栈文件的Docker Swarm文件与Docker Compose文件非常相似。
- Kubernetes是Google开发的 。
- Kubernetes的目标与Docker Swarm的目标非常相似。
- 一项付费企业泊坞服务,可让您在云服务器或本地服务器上构建和运行容器。
- 它提供一个Web UI和一个中央控制面板来运行和管理容器,同时在用户友好的Web界面中提供所有Docker功能。
Docker云“部分”停产
Docker Cloud上提供应用程序,节点和群集集群管理的服务将于[2020年5月21日]关闭…自动构建和注册表存储服务不会受到影响,并将继续可用
解决方法
在深入研究Docker,Google Cloud和Kubernetes的同时,还没有清楚地了解这三个产品,在我看来,这些产品是重叠的,但它们并不兼容。
例如,docker-compose.yml
需要重写文件,以便可以将应用程序部署到Kubernetes。
有人可以对Docker,Docker Compose,Docker Cloud和Kubernetes重叠之处以及其中一个相互依赖的地方进行概括的粗略描述吗?
docker for mac 安装 kubernetes、kubernetes dashboard
-
安装参考地址(按照此文档,安装成功):https://yq.aliyun.com/articles/508460
-
官方说明:https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/
-
常用命令 kubectl 命令:
kubectl get namespaces
kubectl get pods --namespace kube-system
kubectl get deployments --namespace kube-system
kubectl get services --namespace kube-system
kubectl -n kube-system edit service kubernetes-dashboard
kubectl get pods
kubectl get deployments
kubectl get services
kubectl config view
获取令牌,然后登陆 kubernetes dashboard
➜ ~ kubectl get secrets
NAME TYPE DATA AGE
default-token-6ljm8 kubernetes.io/service-account-token 3 6h
➜ ~ kubectl describe secrets default-token-6ljm8
Name: default-token-6ljm8
Namespace: default
Labels: <none>
Annotations: kubernetes.io/service-account.name=default
kubernetes.io/service-account.uid=77d014c2-0804-11e9-acd8-025000000001
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 7 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4tNmxqbTgiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6Ijc3ZDAxNGMyLTA4MDQtMTFlOS1hY2Q4LTAyNTAwMDAwMDAwMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.G9TGa4KGj5B-cMv-0-vuangR2_tFiQ1nJMgtsEPs1BEwPAyjmaC-BL5y0Ux9HyC1mlt0DklO-8_o41i4OD_w0wLymxi8zZQxgY7Tlu3_oE5OKnK58xWN-mMTKKnvfDpZrIBbkWQ5EB49LC7QiTBKGAoixGyOBvU1fmD2AzpdO3sWvNsaOWbMLFcwzHA-M2V-CKU3I07Hxs6uIi9juk4IqkTryfvCDUafTrubpkVktwQr7UwzvmKfbPoWLyn1tbCDhR3Il64daoTE9nlmqWwYZZFmfaZjWWWYfi3QPXuNUNpXRVVd_6gcjUzebR1o-22KoOUbobQ94K-1bYJOQSZNnA
将 token 部分复制到登录页的 token 输入框,登陆即可。 出处:http://www.cnblogs.com/along21/p/9811860.html#auto_id_11
今天的关于docker和kubernetes中hostname的使用和常见问题和docker hostname的分享已经结束,谢谢您的关注,如果想了解更多关于ASPNETCORE_ENVIRONMENT env变量传入docker和kubernetes、cgroup, docker,和kubernetes、Docker Compose和Kubernetes有什么区别?、docker for mac 安装 kubernetes、kubernetes dashboard的相关知识,请在本站进行查询。
本文标签: