前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Kubernetes群集上安装,配置和部署NGINX

如何在Kubernetes群集上安装,配置和部署NGINX

作者头像
Techeek
发布2018-09-17 14:49:28
2.9K0
发布2018-09-17 14:49:28
举报
文章被收录于专栏:云计算云计算

什么是Kubernetes?

Kubernetes是一个基于Google Borg的开源容器管理系统。它可以配置为提供高度可用的,水平自动缩放的自动部署。本指南介绍如何在Linode上设置Kubernetes集群并管理NGINX服务的生命周期。

准备

你会需要:

  • 两个或多个具有私有IP的Linode
  • 每个Linode应该是64位的:
    • Ubuntu 16.04+
    • Debian 9
    • CentOS 7
    • RHEL 7
    • Fedora 26
  • 每个Linode至少2GB RAM
  • root或sudo权限,用于安装和配置Kubernetes。任何用户配置完成后都可以与群集进行交互。

为Kubernetes准备主机Linode

本指南中的步骤创建一个双节点群集。评估您自己的资源需求,并根据您的需求启动适当大小的群集。

  1. 在同一数据中心内创建两个内存至少为2GB的Linode。
  2. 对于每个节点,进入Linode Manager的Remote Access选项卡并添加专用IP。可以在数据中心之间使用公共IP构建Kubernetes集群,但性能和安全性可能会受到影响。
  3. 使用UFWiptables配置防火墙,以确保只有两个节点可以相互通信。

禁用交换内存

Linodes默认启用交换内存。kubelet不支持交换内存,如果交换处于活动状态或甚至存在于您的/etc/fstab文件中,则无法使用。

/etc/fstab应该是这个样子:

/ etc / fstab

1 2 3 4 5 6 7 8 9 10

# /etc/fstab: static file system information. # # use 'blkid' to print the universally unique identifier for a # device; this may be used with uuid= as a more robust way to name devices # that works even if disks are added and removed. see fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> # / was on /dev/sda1 during installation /dev/sda / ext4 noatime,errors=remount-ro 0 1 /dev/sdb none swap sw 0 0

  1. 删除描述交换分区的行。在这个例子中,第10行用/dev/sdb
  2. 禁用交换内存使用: swapoff -a

为Kubernetes Nodes 设置主机名

要使本指南中的命令更易于理解,请在每台计算机上设置主机名和托管文件。

  • 选择一个节点作为您的Kubernetes主节点并通过SSH进入其中。
  • 编辑/etc/hostname并添加: /etc/hostname kube-master
  • 将以下行添加到/etc/hosts: / etc / hosts

<kube-master-private-ip> kube-master

<kube-worker-private-ip> kube-worker-1

如果您有两个以上的节点,也可以添加其私有IP /etc/hosts。 为了便于以后理解输出和调试问题,根据其作用(考虑命名每个主机名kube-worker-1kube-worker-2等等)。

  • 在每个工作节点上执行步骤2和3,相应地更改值。
  • 要使更改生效,请重新启动Linode。

确认主机名

重新启动节点后,请登录每个节点以确认更改。

检查:

  • $ hostname 在终端输出预期的主机名。
  • 您可以通过其主机名ping群集中的所有节点。
  • 使用时在所有节点上正确禁用交换cat /proc/swaps

如果您无法通过其主机名或私有IP ping任何主机:

  1. SSH进入没有响应的主机。
  2. 输入ifconfig。您应该看到一个条目eth0:1列出您的私有IP。如果eth0:1未列出,则可能在将私有IP添加到基础主机之前部署了Linode映像。重新创建图像并返回到指南的开头。

在Linode 上安装Docker和Kubernetes

Debian / Ubuntu:

代码语言:javascript
复制
apt install ebtables ethtool

CentOS的/ RHEL:

代码语言:javascript
复制
yum install ebtables ethtool

安装Docker

这些步骤使用官方Ubuntu存储库安装Docker Community Edition(CE)。要在其他发行版上安装,请参阅官方安装页面

  1. 删除系统上可能存在的旧版Docker: sudo apt remove docker docker-engine docker.io
  2. 确保您拥有必要的软件包以允许使用Docker的存储库: sudo apt install apt-transport-https ca-certificates curl software-properties-common
  3. 添加Docker的GPG密钥: curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. 验证GPG密钥的指纹: sudo apt-key fingerprint 0EBFCD88 您应该看到类似于以下内容的输出: pub 4096R/0EBFCD88 2017-02-22 Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 uid Docker Release (CE deb) <docker@docker.com> sub 4096R/F273FCD8 2017-02-22
  5. 添加stableDocker存储库: sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
  6. 更新软件包索引并安装Docker CE: sudo apt update sudo apt install docker-ce
  7. 将有限的Linux用户帐户添加到该docker组: sudo usermod -aG docker exampleuser 您需要重新启动shell会话才能使此更改生效。
  8. 通过运行内置的“Hello World”程序检查安装是否成功: docker run hello-world

安装kubeadm,kubectl和kubelet

Debian / Ubuntu:

代码语言:javascript
复制
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo 'deb http://apt.kubernetes.io/ kubernetes-xenial main' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl

CentOS的/ RHEL:

代码语言:javascript
复制
cat <<eof > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg
      https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
eof
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet

Kubernetes Master和Slave

配置Kubernetes主节点

  • 在主节点上使用其私有IP初始化您的群集: kubeadm init --pod-network-cidr=192.168.0.0/16 --apiserver-advertise-address=<private IP> 如果遇到表明已启用交换的警告,请返回“ 禁用交换内存”部分。 如果成功,您的输出将类似于: To start using your cluster, you need to run (as a regular user): mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: http://kubernetes.io/docs/admin/addons/ You can now join any number of machines by running the following on each node as root: kubeadm join --token 921e92.d4582205da623812 :6443 --discovery-token-ca-cert-hash sha256:bd85666b6a97072709b210ddf677245b4d79dab88d61b4a521fc00b0fbcc710c
  • 在主节点上,配置kubectl工具: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 检查节点的状态kubectl get nodes。输出将类似于: root@kube-master:~# kubectl get nodes name status roles age version kube-master NotReady master 1m v1.8.1 列出主节点是NotReady因为群集没有容器网络接口(CNI)。CNI是基于容器的网络接口的规范。在本指南中,我们将使用Calico。或者,您可以使用法兰绒或其他CNI获得类似的结果。 “ 配置Kubernetes主节点”部分中--pod-network-cidr使用的参数定义了CNI的网络范围。
  • 仍在主节点上时,运行以下命令将CNI部署到您的集群: kubectl apply -f https://docs.projectcalico.org/v2.6/getting-started/kubernetes/installation/hosted/kubeadm/1.6/calico.yaml
  • 要确保正确设置Calico,请使用kubectl get pods --all-namespaces以查看在kube-system命名空间中创建的pod : root@kube-master:~# kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-etcd-nmx26 1/1 Running 0 48s kube-system calico-kube-controllers-6ff88bf6d4-p25cw 1/1 Running 0 47s kube-system calico-node-bldzb 1/2 CrashLoopBackOff 2 48s kube-system calico-node-k5c9m 2/2 Running 0 48s kube-system etcd-master 1/1 Running 0 3m kube-system kube-apiserver-master 1/1 Running 0 3m kube-system kube-controller-manager-master 1/1 Running 0 3m kube-system kube-dns-545bc4bfd4-g8xtm 3/3 Running 0 4m kube-system kube-proxy-sw562 1/1 Running 0 4m kube-system kube-proxy-x6psn 1/1 Running 0 1m kube-system kube-scheduler-master 1/1 Running 0 3m

此命令使用该-n标志。该-n标志是一个全局kubectl标志,用于选择非默认名称空间。我们可以通过运行来查看现有的名称空间kubectl get namespaces: root@kube-master:~# kubectl get namespaces NAME STATUS AGE default Active 4h kube-public Active 4h kube-system Active 4h

  • kubectl get nodes再次运行以查看主节点现在正在正常运行: root@kube-master:~# kubectl get nodes name status roles age version kube-master Ready master 12m v1.8.1

将节点添加到Kubernetes群集

  1. kubeadm join使用kube-master主机名运行以添加第一个worker: kubeadm join --token <some-token> kube-master:6443 --discovery-token-ca-cert-hash sha256:<some-sha256-hash>
  2. 在主节点上,用于kubectl查看从节点现在是否已就绪: root@kube-master:~# kubectl get nodes name status roles age version kube-master ready master 37m v1.8.1 kube-worker-1 ready 2m v1.8.1

在Kubernetes集群上部署NGINX

部署是逻辑参照荚或豆荚和它们的配置。

  • 从主节点kubectl create进行nginx部署: kubectl create deployment nginx --image=nginx
  • 这会创建一个名为的部署nginxkubectl get deployments列出所有可用部署: kubectl get deployments
  • 使用kubectl describe deployment nginx可查看详细信息: Name: nginx Namespace: default CreationTimestamp: Sun, 15 Oct 2017 06:10:50 +0000 Labels: app=nginx Annotations: deployment.kubernetes.io/revision=1 Selector: app=nginx Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 1 max unavailable, 1 max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx Port: Environment: Mounts: Volumes: Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable OldReplicaSets: NewReplicaSet: nginx-68fcbc9696 (1/1 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 1m deployment-controller Scaled up replica set nginx-68fcbc9696 to 1 该describe命令允许您在更深层次上查询不同的kubernetes资源,例如pod,部署和服务。上面的输出表明nginx在默认命名空间内调用了部署。此部署只有一个复制,并且正在运行docker镜像nginx。端口,底座,体积和环境变量都未设置。
  • 通过互联网访问NGINX容器: kubectl create service nodeport nginx --tcp=80:80 这将在主机上为NGINX部署创建面向公众的服务。因为这是一个节点端口部署,kubernetes将在32000+范围内为主机上的端口分配此服务。 尝试get当前的服务: root@kube-master:~# kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5h nginx NodePort 10.98.24.29 <none> 80:32555/TCP 52s
  • 通过curl在从属节点上使用来验证NGINX部署是否成功: root@kube-master:~# curl kube-worker-1:32555 输出将显示未呈现的“欢迎使用nginx!”页面HTML。
  • 要删除部署,请使用kubectl delete deployment: root@kube-master:~# kubectl delete deployment nginx deployment "nginx" deleted root@kube-master:~# kubectl get deployments No resources found.

更多信息

有关此主题的其他信息,您可能需要参考以下资源。虽然提供这些是希望它们有用,但请注意,我们无法保证外部托管材料的准确性或及时性。

更多教程请前往腾讯云+社区学习更多知识。

参考文献:《How to Install, Configure, and Deploy NGINX on a Kubernetes Cluster》

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Kubernetes?
  • 准备
  • 为Kubernetes准备主机Linode
    • 禁用交换内存
      • 为Kubernetes Nodes 设置主机名
        • 确认主机名
        • 在Linode 上安装Docker和Kubernetes
          • 安装Docker
            • 安装kubeadm,kubectl和kubelet
            • Kubernetes Master和Slave
              • 配置Kubernetes主节点
                • 将节点添加到Kubernetes群集
                • 在Kubernetes集群上部署NGINX
                • 更多信息
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档