0

Docker, Kubeadm, Kubelet, Kubectl我在 Ubuntu 18.04 LTS 上为我的 Kubernetes 集群安装了一些软件包 ( )。

不希望这些软件包自动更新,因为当更新发生在彼此之间时,它们之间会出现一些问题。 我只想在它们稳定时手动更新。

停止包自动更新的正确命令是什么?

我用来在 Ubuntu 18.04 上安装它们的命令

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

sudo apt-get update

sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

cat << EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

sudo apt-get update

sudo apt-get install -y kubelet=1.12.7-00 kubeadm=1.12.7-00 kubectl=1.12.7-00
4

4 回答 4

2

动机:你不想为你的linux机器上的敏感包承担任何风险(当你的应用程序在生产中并且客户使用它时,或者在内部运行一些重要任务时,新版本可能会破坏更改并意外导致停机)。在这种情况下 - 您希望将特定版本固定到您的包中,并确保在没有明确的行动和您的批准的情况下不会发生升级。

解决方案:您应该禁用该unattended-upgrades功能并将pin您的包放入您使用的当前版本(换句话说 - 保留此版本)。

第 1 步:禁用自动升级(又名无人值守升级)

$ sudo vim /etc/apt/apt.conf.d/20auto-upgrades

#edit these lines - which disabling the upgrade feature.

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "0";

第 2 步:保留并冻结您想要防止自我升级的特定软件包:

sudo apt-mark hold <package-name>
于 2020-12-22T09:42:58.763 回答
1

您可以使用hold一个包(或一组包)的状态来不涉及它的升级。这使您能够更精细地根据每个软件包决定应该升级或不应该升级什么。在已知的离题、错误和行为的细微变化期间非常有帮助。

从手册页中dpkg编辑/缩进:

   --get-selections [package-name-pattern...]
          Get list of package selections, and write it to stdout. Without a pattern,
          non-installed packages (i.e. those which have been previously purged) will
          not be shown.

   --set-selections
          Set package selections using file read from stdin. This file should be in
          the format “package state”, where state is one of install, hold, deinstall 
          or purge. Blank lines and comment lines beginning with ‘#’ are also 
          permitted.

          The available file needs to be up-to-date for this command to be useful, 
          otherwise unknown packages will be ignored with a warning. See the 
          --update-avail and  --merge-avail  commands  for more information.

这种格式可以说有点奇怪——但这非常强大和有用。在我使用 Debian/Ubuntu 的 25 年(!!)中,我曾多次依赖它。我可能在某个地方有一个 shell 脚本助手,但我可能需要挖掘。

于 2019-06-27T14:05:36.087 回答
0

apt没有yum类似的标志--enable-repo,并且--disablerepo在执行安装或更新时。此处显示了一种管理 repos 的方法

但是对于您的情况,您添加它们已附加到的存储库的方式,/etc/apt/sources.list因此您可以使用sed注释掉已添加到 installdockerkubernetes.
注意:您应该在安装后和执行之前注释掉行sudo apt-get update

示例:

要禁用 docker repo:
sed -i 's/^deb.*docker.*/# &/g' /etc/apt/sources.list

启用 docker repo 以进行手动更新:
sed -i '/^# deb .*docker.*/s/^# //' /etc/apt/sources.list

于 2019-06-27T13:55:11.297 回答
-1

当天查找:)。Ubuntu apt为您提供了保持软件包自动更新的命令。感谢Dirk给了我提示。

sudo apt-mark hold docker-ce kubelet kubeadm kubectl
于 2019-06-27T15:43:52.657 回答