开发者社区 > 博文 > 实操干货 | Kubernetes集群实操
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

实操干货 | Kubernetes集群实操

  • 京东科技开发者
  • 2020-03-24
  • IP归属:北京
  • 1205360浏览

一、   概述

本练习使用京东智联云主机和kubeadm创建一个最小化的Kubernetes集群。集群包括两个节点,一个是master节点,一个是node节点。

在集群创建成功之后,使用kubectl在该集群上运行简单的应用。

二、   配置信息

序号

资源类型

规格

数量

1

VPC

N/A

1

2

Subnet

N/A

1

3

公网IP

带宽1M

1

4

云主机

2核4GB

2

三、   系统架构

image.png                                             

四、   操作步骤

1.      登录京东智联云控制台领取云资源

1.1 登录京东智联云账号

【如有登录有问题,请检查浏览器,一定设置Chrome为默认浏览器】

体验登录网址:https://console.jdcloud.com/

image.png

如您为新用户,请注册后登录。如您为老用户,请直接登录。

image.png

 

1.2 领取云资源

点击控制台->账户管理->实名认证->个人实名认证

image.png

点击立即认证->从下方三种方式选择认证,建议选择实名手机认证,可快速通过认证

image.png

认证成功

image.png

 

添加小助手IDjdcloud_dev回复公开课,进入交流群领取云资源包

京小云.jpg

(提示:账号实名认证后方可领取)

点击费用管理->代金券管理->余额,查看代金券是否到账。后续可进行动手实操

image.png

登录成功后进入控制台后看到如下界面。

image.png

2.      创建虚拟专用网VPC

点击云服务->私有网络选择华北-北京,点击创建

image.png

输入名称,点击确定

image.png

3.      创建子网

点击私有网络->子网,选择华北-北京,点击创建

image.png

输入名称,选择刚刚创建的私有网络VPC-1,点击确定

image.png

4.      创建云主机

点击云产品->云主机

image.png

点击“创建”

image.png

点击 按配置,地域域选择华北-北京,可用区B

image.png

 

选择本地系统盘

镜像选择Ubuntu  Ubuntu 18.04 64

规格选择 计算优化 标准型 c.n2.large 2 4GB (如果显示规格售罄,请在上面更换可用区后重试)

image.png

 

存储使用默认配置,网络选择刚刚创建的VPC子网,安全组选择默认安全组开放全部端口(此安全组仅用于调试、学习,请不要在生产环境使用该安全组),带宽使用默认配置。

image.png

image.png

输入名称k8s,设置密码请牢记密码用于后续步骤中登录云主机。

image.png

修改购买数量为2,点击立即购买

image.png

点击已阅读并同意,点击立即开通。

image.png

点击刷新按钮,直到云主机进入运行中状态,并且获得公网IP地址。名称为k8s1的节点将作为master,k8s2将作为node。

image.png

5.      使用kubeadm安装单节点kubernetes集群

写在前面:

1.     本操作用例参考kubernetes官方文档Creating a single control-plane cluster with kubeadm https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/

2.     本操作用例创建一个单工作节点集群,仅用于学习、实验目的,不能用于生产环境。

3.   使用kubeadm创建集群步骤比较简单,但是由于众所周知的原因,某些在需要在google网站 (google.com, gcr.io) 上下载的资源无法直接下载。本操作用例的一部分内容用于绕过需要从google网站上下载的内容。通过比较本文档与google官方文档,您可以大致区别出来哪些内容是为了避免直接从google网站上下载而特别增加的。作者也会尽力在文档中指出。

4.     大部分操作需要在master和node节点上分别执行一次,文档中会标明该操作需要在哪个节点上执行。

5.1   登录云主机控制台

点“云产品” –“云主机,进入云主机列表页:

image.png

在列表页找到master (k8s1)和node (k8s2)的公网IP地址。如果云主机的IP地址未显示,您可以点击刷新按钮。您可能需要1到2分钟以等待云主机各种资源准备完毕。

请使用SSH客户端(推荐下载mobaXterm)远程连接云主机。

image.png

以下操作均在ssh客户端远程控制台完成。

5.2   安装Docker

执行节点:k8s1 + k8s2

开始安装Docker软件包:输入 apt update && apt install -y docker.io如下图:

image.png 

5.3   安装kubenetes组件和kubeadm

[由于无法从google下载软件包,本操作将软件仓库地址改为国内地址]

执行节点:k8s1 + k8s2

apt-get update && apt-get   install -y apt-transport-https curl

cat <<EOF | tee   /etc/apt/sources.list.d/kubernetes.list

deb   http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main

EOF

gpg --keyserver keyserver.ubuntu.com   --recv-keys 6A030B21BA07F4FB

gpg --export --armor 6A030B21BA07F4FB |   apt-key add -

apt-get update

apt-get install -y kubelet kubeadm   kubectl

在本操作之后,kubelet服务可能无法运行,这是正常的

5.4   下载关键镜像

[由于kubernetes本身需要一些在gcr.io上存放的镜像,这些镜像国内无法正常下载,本操作从国内仓库预先下载这些镜像。这种方式仅用于学习和调试,正式生产环境不能用这种方式]

执行节点:k8s1 + k8s2

#pull-image.sh

MY_REGISTRY=gcr.azk8s.cn/google_containers

images=$(kubeadm config images list | grep   ^k8s.gcr.io | cut -d '/' -f2)

for imageName in ${images[@]} ; do

    docker   pull gcr.azk8s.cn/google_containers/$imageName

    docker   tag gcr.azk8s.cn/google_containers/$imageName k8s.gcr.io/$imageName

done

 

5.5   修改iptable配置

执行节点:k8s1 + k8s2

cat   <<EOF > /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables   = 1

net.bridge.bridge-nf-call-iptables   = 1

EOF

sysctl   --system

该配置使iptable可以作用于bridge,使kube-proxy可以正常工作。

5.6   初始化cluster

执行节点:k8s1

master节点上运行:

kubeadm init

执行成功后会看到如下提示:

image.png

执行节点:k8s1

master节点执行:

  mkdir -p $HOME/.kube

  cp -i /etc/kubernetes/admin.conf   $HOME/.kube/config

  chown $(id -u):$(id -g) $HOME/.kube/config

该命令用于配置kubectl客户端所需的必要信息。

执行节点:k8s2

拷贝第二个红框的内容,按照提示,在node节点执行:

kubeadm   join [master ip]:6443 --token [example] \

--discovery-token-ca-cert-hash   [example]

成功执行后,将看到如下提示:

image.png

5.7   安装cni网络插件

至此集群已经成功创建,我们在master节点可以使用kubectl查看集群状态:

执行节点:k8s1

在master节点上执行:kubectl get node

image.png


我们可以看到集群有两个节点,其中一个是master,一个是node。但是两个节点都是NotReady状态,这是因为还没有安装网络插件。(通过kubectl describe node k8s1 可以查看节点NotReady的详细原因)

在master节点上执行以下命令安装网络插件 (calico):

kubectl apply -f   https://docs.projectcalico.org/v3.11/manifests/calico.yaml

image.png

5.8   安装完成

执行节点:k8s1

在master节点上执行:kubectl get node

image.png

请注意,镜像下载需要一定时间。您可能需要10分钟以上才能看到集群的两个节点都处于Ready状态。

6.    创建应用

6.1 简单应用

执行节点:k8s1

master节点上执行:kubectl run --generator run-pod/v1 bb --image busybox -- sh -c "echo hello world && sleep 1d"

image.png

查看POD运行状态:kubectl get pod

image.png

查看POD输出:kubectl logs bb

image.png

6.2 创建nginx应用及服务

执行节点:k8s1

在master节点上执行以下命令创建nginx-deploy.yaml:

cat   <<EOF > nginx-deploy.yaml

apiVersion:   apps/v1

kind:   Deployment

metadata:

  name: nginx-deployment

  labels:

    app: nginx

spec:

  replicas: 2

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: nginx

EOF

在master节点上执行以下命令创建一个deployment:

kubectl apply -f nginx-deploy.yaml

image.png

在master节点上执行以下命令查看POD:

kubectl get pod

image.png

注意:第一次下载镜像需要一些时间,POD可能要等待10分钟以上才会进入running状态。

master节点上执行以下命令创建nginx-svc.yaml:

cat   <<EOF > nginx-svc.yaml

apiVersion:   v1

kind:   Service

metadata:

  name: nginx-service

spec:

  selector:

    app: nginx

  ports:

    - protocol: TCP

      port: 80

      nodePort: 30303

  type: NodePort

EOF

在master节点上执行以下命令创建一个service:

kubectl apply -f nginx-svc.yaml

image.png

在master节点上执行以下命令查看service:

kubectl get svc

image.png

      使用浏览器访问node节点 (k8s2)IP地址和端口30303

image.png

 

7.      结束

恭喜完成所有任务!

请根据个人兴趣继续探索kubernetes。

完毕后请及时释放不再继续使用的资源。

谢谢!

8. 上传练习截图,领取奖励

部署成功后,请将两个练习页面截图形式回复到文章评论区,有机会获得奖励。

链接地址:https://developer.jdcloud.com/topics/912

要求:

Kubernetes集群作业:页面截图+账号名称(参考下图)

账户名称:jdcloudAI_dev

 image.png

奖励说明:活动时间内成功提交测试结果的,3名部署成功者可以获得京东智联云音响移动电源套装,第4-20名部署成功者可以获得京东Joy公仔一只


活动时间:

请于2020年4月1日晚20点前提交,2020年4月2日公布结果和领奖方式。


共0条评论
文章数
544
阅读量
5632445

相关产品

  • Kubernetes 集群
    采用管理节点全托管的方式,提供简单易用、高可靠、功能强大的容器管理服务