设为首页 收藏本站
查看: 918|回复: 0

[经验分享] kubernetes1.5新特性:新版本kubeadm

[复制链接]

尚未签到

发表于 2018-1-5 16:58:21 | 显示全部楼层 |阅读模式
一、概述

下面介绍的内容会展示如何在Ubuntu 16.04、CentOS7和HypriotOS v1.0.1+操作系统上部署一套安全的Kubernetes集群。下面介绍的安装方式是通过kubeadmin工具来完成的,这个工具在Kubernetes1.4的时候就已经被增加到Kubernetes发布包中了。在Kubernetes1.5中,kubeadmin增强了用户交互,并且修复了一些bug。

可以在本地虚拟机、物理机或者其他云服务提供商的IaaS资源上来使用kubeadmin安装Kubernetes。也可以很容易将kubeadmin集成到Terraform、 Chef、Puppet等自动化工具中。对于kubeadmin所有命令行信息介绍,可以参考http://kubernetes.io/docs/admin/kubeadm/。

在Kubernetes1.5中,Kubeadmin工具还是阿尔法版本,也就是说大家可以在研发测试环境中使用,特别需要注意的地方是kubeadmin还不能全面支持自动配置云服务提供商IaaS资源。如果在云服务提供商IaaS资源上部署,那么需要参考云服务提供商的技术文档。

Kubeadm被设计成针对大规模集群部署环境中使用的,当然也可以很容易的手动安装。如果在你自己IaaS基础架构上或者已经存在的自动化系统上部署Kubernetes,kubeadm是一个很好的选择。


二、部署前提条件


  • 有多台虚拟机或者物理机,上面操作系统是Ubuntu 16.04+、CentOS 7或者HypriotOS v1.0.1+。
  • 每台主机上面至少1G内存。
  • 所有主机之间网络可达。
三、部署目的


  • 在指定的主机上安装一套安全的Kubernetes集群。
  • 在集群上安装一个POD网络,用来允许POD之间相互通讯。
  • 在Kubernetes集群上部署一个微服务应用样例。
四、部署步骤

4.1、在主机上安装kubelet和kubeadm

在主机上安装下面软件包:



  • docker:建议安装v1.11.2版本版本,v1.10.3版本和v1.12.1版本也可以。
  • kubelet:安装v1.5版本
  • kubectl: 安装v1.5版本
  • kubeadm: 安装v1.5版本
需要注意的是,如果主机上已经安装了kubeadm,那么需要更新成Kubernetes对应的v1.5版本。

按照下面顺序来配置主机:



  • SSH登录到主机上,并且切换成root用户。
  • 如果主机是Ubuntu或者HypriotOS,那么运行命令:
  

curl -shttps://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -  
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
  
deb http://apt.kubernetes.io/ kubernetes-xenial main
  
EOF
  
apt-get update
  
apt-get install -y docker.io
  
apt-get install -y kubelet kubeadm kubectl kubernetes-cni
如果主机是CentOS操作系统,那么运行命令:cat <<EOF > /etc/yum.repos.d/kubernetes.repo  
[kubernetes]
  
name=Kubernetes
  
baseurl=http://yum.kubernetes.io/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 docker kubelet kubeadm kubectlkubernetes-cni
  
systemctl enable docker && systemctl start docker
  
systemctl enable kubelet && systemctl startkubelet
执行完上述命令后,kubelet会进入重启循环模式,每隔几秒钟就会重启,kubelte这时候再等待执行kubeadm发出的命令。
需要注意的是,需要禁用SELinux,比如通过setenforce0命令。禁用的目的是让容器可以读取主机文件系统,以便了解如何配置POD网络。


4.2、初始化Kubernetes的master节点

Kubernetes的master节点上运行着etcd和api server等组件,所有这些组件都需要通过kubelet启动。

在卸载kubernetes前,不要运行两次kubeadm init命令。

如果已经运行了kubeadm init命令,导致主机状态同kuberentes集群状态不兼容,这时候kubeadm会发送告警信息,提示目前不能正常工作,因为不满足强制要求。

可以通过下面命令初始化master节点:


# kubeadm init  
需要注意的是:这个操作会自动发现网卡设备,并且将master节点上网卡设备设置成默认网关。如果想使用另外的网卡设备,那么需要在执行kubeadminit命令时增加参数--api-advertise-addresses=<ip-address>
如果你想使用flannel搭建POD网络,需要增加参数--pod-network-cidr=10.244.0.0/16。如果不适用flannel,那么就不需要这么做了。

可以参考kubeadm指南http://kubernetes.io/docs/admin/kubeadm/,在这里面可以看到更详细的kubeadmin init参数。

执行完kubeadm init命令后将会花几分钟自动下载并且安装kubernetes集群控制组件。

下面是命令执行后的输出内容:

  

[kubeadm] WARNING: kubeadm is in alpha, please do not useit for production clusters.  

  
[preflight] Running pre-flight checks
  

  
[init] Using Kubernetes version: v1.5.1
  

  
[tokens] Generated token:"064158.548b9ddb1d3fad3e"
  

  
[certificates] Generated Certificate Authority key andcertificate.
  

  
[certificates] Generated API Server key and certificate
  

  
[certificates] Generated Service Account signing keys
  

  
[certificates] Created keys and certificates in"/etc/kubernetes/pki"
  

  
[kubeconfig] Wrote KubeConfig file to disk:"/etc/kubernetes/kubelet.conf"
  

  
[kubeconfig] Wrote KubeConfig file to disk:"/etc/kubernetes/admin.conf"
  

  
[apiclient] Created API client, waiting for the controlplane to become ready
  

  
[apiclient] All control plane components are healthyafter 61.317580 seconds
  

  
[apiclient] Waiting for at least one node to register andbecome ready
  

  
[apiclient] First node is ready after 6.556101 seconds
  

  
[apiclient] Creating a test deployment
  

  
[apiclient] Test deployment succeeded
  

  
[token-discovery] Created the kube-discovery deployment,waiting for it to become ready
  

  
[token-discovery] kube-discovery is ready after 6.020980seconds
  

  
[addons] Created essential addon: kube-proxy
  

  
[addons] Created essential addon: kube-dns
  

  

  
Your Kubernetes master has initialized successfully!
  

  

  
You should now deploy a pod network to the cluster.
  

  
Run "kubectl apply -f [podnetwork].yaml" withone of the options listed at:
  

  http://kubernetes.io/docs/admin/addons/
  

  

  
You can now join any number of machines by running thefollowing on each node:
  

  

  
kubeadm join --token=<token> <master-ip>
在kubeadm join命令中,需要输入token参数,通过token参数可以确保将被授权的节点添加到kubernetes集群中,通过token参数来保证安全。
如果不在乎安全,比如安装一个单机的kubernetes开发环境,那么可以运行如下命令:

  

# kubectl taint nodes --all dedicated-  

  
node "test-01" tainted
  

  
taint key="dedicated" and effect=""not found.
  

  
taint key="dedicated" and effect=""not found.
  

4.3、部署POD网络

在部署应用和启动kube-dns之前,需要部署POD网络,需要注意的是kubeadm只是支持基于CNI的网络,因此基于kubenet的网络不会正常工作。

可以从下面网页了解kubernetes支持的网络插件,http://kubernetes.io/docs/admin/addons/。

可以通过下面命令部署POD网络:


# kubectl apply -f <add-on.yaml>对于不同的网络插件,需要参考指定的网络插件安装指南。需要注意的是每个kuberentes集群只能部署一种POD网络。一旦部署完,需要检查kube-dns POD是否运行,通过命令kubectl get pods --all-namespaces的输出来确认网络是否正常工作。
一旦kube-dns POD正常运行了,可以向kubernetes集群中添加工作节点。


4.4、向Kubernetes集群中添加工作节点

为了将工作节点添加到kubernetes集群中,对每个工作节点主机,都需要SSH到这个主机上,并且切换到root用户,然后运行命令:

  

# kubeadm join --token <token> <master-ip>  

  
[kubeadm] WARNING: kubeadm is in alpha, please do not useit for production clusters.
  

  
[preflight] Running pre-flight checks
  

  
[preflight] Starting the kubelet service
  

  
[tokens] Validating provided token
  

  
[discovery] Created cluster info discovery client,requesting info from"http://192.168.x.y:9898/cluster-info/v1/?token-id=f11877"
  

  
[discovery] Cluster info object received, verifyingsignature using given token
  

  
[discovery] Cluster info signature and contents arevalid, will use API endpoints [https://192.168.x.y:6443]
  

  
[bootstrap] Trying to connect to endpointhttps://192.168.x.y:6443
  

  
[bootstrap] Detected server version: v1.5.1
  

  
[bootstrap] Successfully established connection withendpoint "https://192.168.x.y:6443"
  

  
[csr] Created API client to obtain unique certificate forthis node, generating keys and certificate signing request
  

  
[csr] Received signed certificate from the API server:
  

  
Issuer: CN=kubernetes | Subject: CN=system:node:yournode| CA: false
  

  
Not before: 2016-12-15 19:44:00 +0000 UTC Not After:2017-12-15 19:44:00 +0000 UTC
  

  
[csr] Generating kubelet configuration
  

  
[kubeconfig] Wrote KubeConfig file to disk:"/etc/kubernetes/kubelet.conf"
  

  

  
Node join complete:
  

  
* Certificate signing request sent to master and response
  

  received.
  

  
* Kubelet informed of new secure connection details.
  

  

  
Run 'kubectl get nodes' on the master to see this machinejoin.
  

添加完成后,在master节点上运行命令kubectl getnodes,会显示所有已经添加到集群中的节点主机。


(可选步骤)不在master节点上操作集群,而是在其他工作节点上操作集群

需要将master节点上面的kubernetes配置文件拷贝到当前节点上,然后执行kubectl命令:

  

# scp root@<master ip>:/etc/kubernetes/admin.conf .  

  
# kubectl --kubeconfig ./admin.conf get nodes
  

(可选步骤)连接到API Serer组件上

如果已经部署了dashboard,那么可以从集群外部连接到APIServer组件上,然后查看dashboard:

  

# scp root@<master ip>:/etc/kubernetes/admin.conf .  

  
# kubectl --kubeconfig ./admin.conf proxy
可以在本地访问API Server

http://localhost:8001/api/v1(可选步骤)部署样例应用
上面已经部署完成了一套kubernetes环境,下面部署一个电商微服务应用。

  

# kubectl create namespace sock-shop  

  
# kubectl apply -n sock-shop -f "https://github.com/microservices-demo/microservices-demo/blob/master/deploy/kubernetes/complete-demo.yaml?raw=true"
  

  然后查看分配给样例应用的服务信息:

# kubectl describe svc front-end -n sock-shop  

  
Name:                  front-end
  

  
Namespace:             sock-shop
  

  
Labels:                name=front-end
  

  
Selector:              name=front-end
  

  
Type:                  NodePort
  

  
IP:                    100.66.88.176
  

  
Port:                  <unset> 80/TCP
  

  
NodePort:              <unset> 31869/TCP
  

  
Endpoints:             <none>
  

  
Session Affinity:      None
  
经过几分钟,会下载h额启动样例应用所需容器,然后就可以通过命令kubectlget pods -n sock-shop的输出查看样例应用POD详细信息
进入到Kubernetes集群的master节点上,通过浏览器访问http://<master_ip>:<port>。在上面这个例子中,端口是31869,这个端口可以通过命令kubectl describe查询出来。

如果有防火墙,那么确保这个端口可以被访问到。


五、卸载

通过在master节点上运行命令kubectl delete namespace sock-shop 来卸载这个样例应用。  
可以通过下面命令重置kubeadm工具:


# kubeadm reset  
如果想重新开始,那么依次运行命令systemctl start kubelet、kubeadm init和kubeadm join。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-431956-1-1.html 上篇帖子: Magnum Kuernetes源码分析(一) 下篇帖子: [k8s]coredns/kube-dns配置subdomain
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表