miaoyun+Rancher+K8S学习与实践


安装kubeadm

<p>安装kubeadm</p> <p>官方文档google翻译 <a href="https://translate.google.com/translate?depth=1&hl=zh-CN&rurl=translate.google.com&sl=en&tl=zh&u=https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/">https://translate.google.com/translate?depth=1&hl=zh-CN&rurl=translate.google.com&sl=en&tl=zh&u=https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/</a></p> <p>此页面显示了如何安装kubeadm工具箱。有关在执行此安装过程后如何使用kubeadm创建集群的信息,请参阅使用kubeadm创建集群页面。 在你开始之前</p> <pre><code>一台或多台运行以下其中一项的计算机: Ubuntu 16.04以上 Debian 9+ CentOS的7 红帽企业Linux(RHEL)7 Fedora 25+ HypriotOS v1.0.1 + 容器Linux(已通过1800.6.0测试) 每台计算机2 GB或更多的RAM(更少的空间将为您的应用程序留出很少的空间) 2个或更多CPU 群集中所有计算机之间的完整网络连接(可以使用公用或专用网络) 每个节点的唯一主机名,MAC地址和product_uuid。有关更多详细信息,请参见此处。 某些端口在您的计算机上打开。有关更多详细信息,请参见此处。 交换已禁用。您必须禁用交换才能使kubelet正常工作。</code></pre> <p>验证MAC地址和product_uuid对于每个节点都是唯一的</p> <pre><code>您可以使用以下命令获得网络接口的MAC地址ip link或ifconfig -a 可以使用以下命令检查product_uuid sudo cat /sys/class/dmi/id/product_uuid</code></pre> <p>尽管某些虚拟机可能具有相同的值,但是硬件设备很有可能具有唯一的地址。Kubernetes使用这些值来唯一地标识集群中的节点。如果这些值不是每个节点唯一的,则安装过程可能会失败。 检查网络适配器</p> <p>如果您有多个网络适配器,并且您的Kubernetes组件在默认路由上不可用,我们建议您添加IP路由,以便Kubernetes群集地址通过适当的适配器。 让iptables查看桥接流量</p> <p>作为您的Linux节点iptables正确查看桥接流量的要求,您应确保net.bridge.bridge-nf-call-iptables在sysctl配置中将其设置为1 ,例如</p> <p>cat &lt;&lt;EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system</p> <p>br_netfilter在执行此步骤之前,请确保已加载模块。这可以通过运行来完成lsmod | grep br_netfilter。要显式加载,请调用sudo modprobe br_netfilter。</p> <p>有关更多详细信息,请参见“ 网络插件要求”页面。 检查所需的端口 控制平面节点 协议 方向 端口范围 目的 使用者 TCP协议 入站 6443 * Kubernetes API服务器 所有 TCP协议 入站 2379-2380 etcd服务器客户端API kube-apiserver等 TCP协议 入站 10250 Kubelet API 自控平面 TCP协议 入站 10251 库伯调度器 自 TCP协议 入站 10252 kube-controller-manager 自 工作节点 协议 方向 端口范围 目的 使用者 TCP协议 入站 10250 Kubelet API 自控平面 TCP协议 入站 30000-32767 NodePort服务† 所有</p> <p>† NodePort服务的默认端口范围。</p> <p>标有*的任何端口号都是可覆盖的,因此您需要确保您提供的任何自定义端口也处于打开状态。</p> <p>尽管etcd端口包含在控制平面节点中,但是您也可以在外部或自定义端口上托管自己的etcd群集。</p> <p>您使用的Pod Network插件(请参阅下文)也可能需要打开某些端口。由于每个Pod Network插件的情况不同,因此请参阅插件的文档,以了解所需的端口。 安装运行时</p> <p>为了在Pods中运行容器,Kubernetes使用 容器运行时 。</p> <pre><code>Linux节点 其他操作系统</code></pre> <p>默认情况下,Kubernetes使用 容器运行时界面 (CRI)与您选择的容器运行时交互。</p> <p>如果您未指定运行时,则kubeadm会通过扫描众所周知的Unix域套接字列表自动尝试检测已安装的容器运行时。下表列出了容器运行时及其关联的套接字路径: 运行 Unix域套接字的路径 码头工人 /var/run/docker.sock 装箱的 /run/containerd/containerd.sock CRI-O /var/run/crio/crio.sock</p> <p>如果同时检测到Docker和containerd,则Docker优先。这是必需的,因为Docker 18.09附带了容器,并且即使仅安装了Docker,也可以检测到两者。如果检测到其他两个或更多运行时,则kubeadm退出并显示错误。</p> <p>kubelet通过内置的dockershimCRI实现与Docker集成。</p> <p>有关 更多信息,请参见容器运行时。</p> <p>默认情况下,kubeadm使用 码头工人作为容器运行时。kubelet通过内置的dockershimCRI实现与Docker集成。</p> <p>有关 更多信息,请参见容器运行时。 安装kubeadm,kubelet和kubectl</p> <p>您将在所有计算机上安装以下软件包:</p> <pre><code>kubeadm:引导集群的命令。 kubelet:在集群中所有计算机上运行的组件,它执行诸如启动Pod和容器之类的操作。 kubectl:与您的集群通信的命令行工具。</code></pre> <p>kubeadm 不会安装或管理kubelet或kubectl对你,所以你需要确保他们想要kubeadm安装适合你的Kubernetes控制平面的版本匹配。如果您不这样做,则存在发生版本偏斜的风险,这可能导致意外的,错误的行为。但是,支持kubelet和控制平面之间的一个次要版本偏斜,但是kubelet版本不得超过API服务器版本。例如,运行1.7.0的kubelet应该与1.8.0 API服务器完全兼容,反之亦然。</p> <p>有关安装的信息kubectl,请参阅安装和设置kubectl。</p> <pre><code>警告:这些说明从所有系统升级中排除了所有Kubernetes软件包。这是因为kubeadm和Kubernetes需要 特别注意进行升级。</code></pre> <p>有关版本偏斜的更多信息,请参见:</p> <pre><code>Kubernetes 版本和版本偏斜政策 特定于Kubeadm的版本倾斜政策 Ubuntu,Debian或HypriotOS CentOS,RHEL或Fedora Fedora CoreOS</code></pre> <p>sudo apt-get update &amp;&amp; sudo apt-get install -y apt-transport-https curl curl -s <a href="https://packages.cloud.google.com/apt/doc/apt-key.gpg">https://packages.cloud.google.com/apt/doc/apt-key.gpg</a> | sudo apt-key add - cat &lt;&lt;EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list deb <a href="https://apt.kubernetes.io/">https://apt.kubernetes.io/</a> kubernetes-xenial main EOF sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl</p> <p>cat &lt;&lt;EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=<a href="https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch">https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch</a> enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=<a href="https://packages.cloud.google.com/yum/doc/yum-key.gpg">https://packages.cloud.google.com/yum/doc/yum-key.gpg</a> <a href="https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg">https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg</a> exclude=kubelet kubeadm kubectl EOF</p> <h1>Set SELinux in permissive mode (effectively disabling it)</h1> <p>sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config</p> <p>sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes</p> <p>sudo systemctl enable --now kubelet</p> <p>笔记:</p> <pre><code>通过运行setenforce 0并sed ...有效禁用SELinux,将其设置为许可模式。这是允许容器访问主机文件系统所必需的,例如Pod网络所需要的。您必须执行此操作,直到kubelet中的SELinux支持得到改善。 如果您知道如何配置SELinux,则可以将其保持启用状态,但是它可能需要kubeadm不支持的设置。</code></pre> <p>安装CNI插件(大多数Pod网络需要):</p> <p>CNI_VERSION=&quot;v0.8.2&quot; sudo mkdir -p /opt/cni/bin curl -L &quot;<a href="https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz">https://github.com/containernetworking/plugins/releases/download/${CNI_VERSION}/cni-plugins-linux-amd64-${CNI_VERSION}.tgz</a>&quot; | sudo tar -C /opt/cni/bin -xz</p> <p>定义目录以下载命令文件</p> <p>DOWNLOAD_DIR=/usr/local/bin sudo mkdir -p $DOWNLOAD_DIR</p> <p>安装crictl(kubeadm / Kubelet容器运行时接口(CRI)所需)</p> <p>CRICTL_VERSION=&quot;v1.17.0&quot; curl -L &quot;<a href="https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz">https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz</a>&quot; | sudo tar -C $DOWNLOAD_DIR -xz</p> <p>安装kubeadm,kubelet,kubectl并添加一个kubeletsystemd服务:</p> <p>RELEASE=&quot;$(curl -sSL <a href="https://dl.k8s.io/release/stable.txt">https://dl.k8s.io/release/stable.txt</a>)&quot; cd $DOWNLOAD_DIR sudo curl -L --remote-name-all <a href="https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl">https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin/linux/amd64/{kubeadm,kubelet,kubectl</a>} sudo chmod +x {kubeadm,kubelet,kubectl}</p> <p>RELEASE_VERSION=&quot;v0.2.7&quot; curl -sSL &quot;<a href="https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service">https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service</a>&quot; | sed &quot;s:/usr/bin:${DOWNLOAD_DIR}:g&quot; | sudo tee /etc/systemd/system/kubelet.service sudo mkdir -p /etc/systemd/system/kubelet.service.d curl -sSL &quot;<a href="https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf">https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf</a>&quot; | sed &quot;s:/usr/bin:${DOWNLOAD_DIR}:g&quot; | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf</p> <p>启用并开始kubelet:</p> <p>systemctl enable --now kubelet</p> <p>现在,kubelet每隔几秒钟重新启动一次,因为它在崩溃循环中等待kubeadm告诉它该怎么做。 在控制平面节点上配置kubelet使用的cgroup驱动程序</p> <p>使用Docker时,kubeadm将自动检测kubelet的cgroup驱动程序并/var/lib/kubelet/config.yaml在运行时将其设置在文件中。</p> <p>如果使用其他CRI,则必须使用您的cgroupDriver值修改文件,如下所示:</p> <p>apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: <value></p> <p>请注意,只有在CRI的cgroup驱动程序不是cgroupfs的情况下,才需要这样做,因为这已经是kubelet中的默认值。</p> <pre><code>注意:由于--cgroup-driverkubelet已弃用该标志,因此,如果在/var/lib/kubelet/kubeadm-flags.env或/etc/default/kubelet(/etc/sysconfig/kubelet对于RPM)中具有该标志,请删除它并改用KubeletConfiguration(/var/lib/kubelet/config.yaml默认存储在)中。</code></pre> <p>需要重新启动kubelet:</p> <p>systemctl daemon-reload systemctl restart kubelet</p> <p>正在为其他容器运行时(如CRI-O和容器化)自动检测cgroup驱动程序。</p>

页面列表

ITEM_HTML