当我连接到 pod 或 kubernetes VM 时,是否有显示用作 NTP 的选项metadata.google.internal
?我尝试了以下操作:ntpq -p
,结果显示未找到命令,但已在https://cloud.google.com/compute/docs/instances/managing-instances。此文件不存在:vim /etc/ntp.conf
。我需要它作为证明,显示使用了哪个服务器。
答案1
创建 GKE 集群时,您可以选择指定哪个操作系统作为 Kubernetes 安装的基础。您可以选择以下选项:
- 容器优化操作系统 (cos)
- 带有 containerd 的容器优化操作系统 (cos)
- Ubuntu
- 带有 containerd 的 Ubuntu
您可以按照 Google Cloud Platform 中的路径进行选择:
Kubernetes 引擎->创建 Kubernetes 集群->节点池->默认池->节点->图像类型。
您的选择将影响您可以在节点上内部使用的工具。
容器优化操作系统
关于容器优化操作系统的一句话:
容器优化操作系统是您的计算引擎针对运行 Docker 容器进行了优化的虚拟机。借助 Container-Optimized OS,您可以快速、高效、安全地在 Google Cloud Platform 上启动 Docker 容器。Container-Optimized OS 由 Google 维护,基于开源Chromium 操作系统项目。
请查看官方文档,其中介绍了 Container-Optimized OS 的功能、优点和局限性:Cloud.google.com:容器优化的操作系统特性、优势和局限性
Container-Optimized OS 不包含包管理器;因此,您无法直接在实例上安装软件包。但是,您可以使用CoreOS 工具箱在隔离容器中安装并运行调试和管理工具。
正如上述文档所述,没有可用的包管理器,但您可以使用 CoreOS 工具箱来调试和安装所需的软件。
您可以使用 systemd 检查您的 Container-Optimized OS 节点使用了哪个服务器,如下所示:
$ systemctl status systemd-timesyncd
它应该会给你类似这样的输出:
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2020-03-03 21:17:35 UTC; 6 days ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 219 (systemd-timesyn)
Status: "Synchronized to time server 169.254.169.254:123 (169.254.169.254)."
Tasks: 2 (limit: 4915)
Memory: 832.0K
CPU: 591ms
CGroup: /system.slice/systemd-timesyncd.service
└─219 /usr/lib/systemd/systemd-timesyncd
请具体查看
Status: "Synchronized to time server 169.254.169.254:123 (169.254.169.254)."
以上消息表示节点使用哪个服务器来同步时间。
您可以169.254.169.254
通过以下方式获取有关 IP 地址的更多信息:Serverfault.com:这个 IP 地址 169.254.169.254 是什么
169.254.169.254
您可以在节点上使用所提到的 CoreOS Toolbox检查 DNS 名称nslookup
:
$ /usr/bin/toolbox
$ apt-get install -y dnsutils
$ nslookup 169.254.169.254
它应该给你一个输出:
Server: 169.254.169.254
Address: 169.254.169.254#53
Non-authoritative answer:
254.169.254.169.in-addr.arpa name = metadata.google.internal.
Authoritative answers can be found from:
上面的输出表明的地址169.254.169.254
是提到的metadata.google.internal
Ubuntu
使用 Ubuntu 映像创建的 GKE 集群,您可以使用以下方式检查 NTP 信息:
- systemd
- DHCP 租约
ntptrace
nslookup
系统化
您可以像使用 Container-Optimized OS 一样检查您的 Ubuntu 节点使用哪个 NTP 服务器,如下所示:
$ systemctl status systemd-timesyncd
DHCP 租约
DHCP 租约包含有关 NTP 服务器的信息。您可以通过以下方式获取有关 DHCP 租约的信息:
USER@NODE:~$ cat /var/lib/dhcp/dhclient.leases
上述命令的输出应如下所示:
lease {
interface "eth0";
fixed-address 10.156.0.X;
option subnet-mask 255.255.255.255;
option routers 10.156.0.1;
option dhcp-lease-time 86400;
option dhcp-message-type 5;
option domain-name-servers 169.254.169.254;
option dhcp-server-identifier 169.254.169.254;
option interface-mtu 1460;
option domain-search "X.internal.", "Y.internal";
option ntp-servers 169.254.169.254;
option rfc3442-classless-static-routes 32,10,156,0,1,0,0,0,0,0,10,156,0,1;
option host-name "X.internal";
option domain-name "X.internal";
renew 2 2020/03/10 09:12:37;
rebind 2 2020/03/10 18:40:09;
expire 2 2020/03/10 21:40:09;
}
请具体查看:
option ntp-servers 169.254.169.254;
此行表明所使用的 NTP 服务器。
跟踪
Ntptrace
应显示169.254.169.254
如下:
localhost: stratum 3, offset 0.000058, synch distance 0.026242
169.254.169.254: timed out, nothing received
***Request timed out
查找工具
您可以按照与 CoreOS Toolbox 中相同的方式检查它是否与ntp-server
匹配 。nslookup
metadata.google.internal
如果您对此主题有任何疑问,请告诉我。
答案2
2024 更新答案以反映变化:
https://cloud.google.com/compute/docs/instances/configure-ntp
^-- 指出 Linux VM 使用 ntpd 或 chronyd
- 尝试 ssh 进入 GKE 节点
- 提示:您可以按照以下说明进行操作https://cloud.google.com/iap/docs/using-tcp-forwarding,添加一个 VPC 防火墙规则,允许从 GCP 的 IAP(身份感知代理)进行 SSH,这将允许通过浏览器进行 ssh 以及使用 gcloud 命令进行 ssh 自动工作。
从那里尝试以下操作:
systemctl list-units | grep ntp
systemctl list-units | grep time
systemctl list-units | grep chrony
# chronyd.service loaded active running NTP client/server
# ^-- ok proof chronyd is installed and maintaining NTP
systemctl status chronyd
# ^-- works but not much of interest
chronyc sources
# MS Name/IP address Stratum Poll Reach LastRx Last sample
# ===============================================================================
# ^* metadata.google.internal 2 8 377 187 -3733ns[-4873ns] +/- 315us
^-- chronyc 源(我从 GCP 的文档中了解到它的存在)
显示正在使用默认 NTP 服务器(metadata.google.internal)