GVKun编程网logo

docker和kubernetes中hostname的使用和常见问题(docker hostname)

11

本文的目的是介绍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)

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
    }
}

这里我们可以关注几个事情:

  1. pause容器和应用容器都是使用独自的uts namespace。应用容器之间也都是使用独立的namespace,因此任何一个容器启动后修改hostname并不会影响到其他的容器。

  2. 如果判断是使用物理机网络就是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

ASPNETCORE_ENVIRONMENT env变量传入docker和kubernetes

很抱歉,但是在您的问题中,您缺少许多详细信息,例如DOCKERFILE或kubernetes yaml配置文件。但是,根据您的写意,我相信article是您的答案。

简而言之,它可能会将appsettings文件移开一点,因为它们可能包含秘密,因此它们不应进入docker映像。而不是用头盔表代替,您将您的秘密作为参数传递。因此,肯定是Build Once,Deploy Everywhere方法。

cgroup, docker,和kubernetes

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 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

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的相关知识,请在本站进行查询。

本文标签: