2.1 kubernetes安装与配置
2.1.1安装kubernetes
CPU和内存:
Master至少1core和2G内存
Node至少1core和2G内存
Linix操作系统:
基于X86_64架构的各种Linux发行版本,Red Hat、CentOS、Fedora、Ubuntu等,
Kernel版本要求在3.10及以上
推荐:CentOS7、Red Hat Linux7
Docker 1.9版本以上
etcd 2.0版本及以上
kubernetes官方下载地址:
https://github.com/kubernetes/kubernetes/releases
Kubernetes Master节点安装部署etcd、kube-apiserver、kube-controller-manager、kube-scheduler服务进程。工作节点Node上仅需要部署kubelet和kube-proxy服务进程。
Kubernetes还提供了一个“all-in-one”的hyperkube程序来完成对以上服务进程的启动。
2.1.2配置和启动Kubernetes服务
Kubernetes的Master和Node之间有大量的网络通信,安全的做法是在防火墙上配置个组件需要相互通信的端口,在一个安全的内部网络环境中可以关闭防火墙服务。
系统CentOS7.3
关闭防火墙
systemctl status firewalld
systemctl disable firewalld
systemctl stop firewalld
1、安装etcd、kubernetes
yum install etcd kubernetes
默认版本:
docker 1.12.6
etcd-3.1.0
kubernetes-1.5.2-0.2
kubernetes-client 1.5.2
kubernetes-master 1.5.2
kubernetes-node 1.5.2
1)etcd服务
安装后配置文件位置:
cat /usr/lib/systemd/system/etcd.service
cat /etc/etcd/etcd.conf
验证etcd是否正常启动
[root@cent7-2 docker]# etcdctl cluster-health
member 9f3258a917a82a2a is healthy: got healthy result from http://localhost:2379
cluster is healthy
2)kube-apiserver服务
cat /usr/lib/systemd/system/kube-apiserver.service
cat /etc/kubernetes/apiserver
3)kube-controller-manager服务
cat /usr/lib/systemd/system/kube-controller-manager.service
cat /etc/kubernetes/controller-manager
4)kube-scheduler服务
cat /usr/lib/systemd/system/kube-scheduler.service
cat /etc/kubernetes/scheduler
将服务加入开机启动
systemctl enable kube-apiserver.service
systemctl start kube-apiserver.service
systemctl enable kube-controller-manager
systemctl start kube-controller-manager
systemctl enable kube-scheduler
systemctl start kube-scheduler
通过systemctl status
查看状态,“running”表示启动成功
到此Master服务启动完成。
2、Node上的kubelet、kube-proxy服务
1)kubelet服务
cat /usr/lib/systemd/system/kubelet.service
cat /etc/kubernetes/kubelet
2)kube-proxy服务
cat /usr/lib/systemd/system/kube-proxy.service
cat /etc/kubernetes/proxy
systemctl enable kubelet.service
systemctl start kubelet.service
systemctl enable kube-proxy
systemctl start kube-proxy
kubelet默认采用想Master自动注册本Node的机制,在Master上查看各Node的状态,状态为Ready表示Node已经成功注册并且状态可用。
[root@cent7-2 log]# kubectl get nodes
NAME STATUS AGE
127.0.0.1 Ready 23h
等所有的Node状态都是Ready后,一个Kubernetes集群就启动完成了,接下来可以创建Pod、RC、Service等资源对象来不是Docker容器应用了。
2.1.3Kubernetes集群安全设置(有兴趣的朋友网上搜索下,这里不做介绍)
1、基于CA签名的双向数字证书认证方式
2、基于HTTP BASE或TOKEN的简单认证方式
2.1.4Kubernetes版本升级
Kubernetes版本升级应考虑正在运行的容器不受影响,应对集群中的各Node逐个进行隔离,然后等待在其上运行的容器全部执行完成,再更新该Node上的kubelet和kube-proxy服务,将全部Node都更新完成后,最后更新Master的服务。
通过官网获取最新版本的二进制kubernetes.tar.gz,解压提取文件;
逐个隔离Node,等待在其上运行的全部容器工作完成,更新kubelet和kube-proxy服务文件,然后重启这两个服务;
更新Master的kube-apiserver、kube-controller-manager、kube-scheduler服务文件并启动;
2.1.5内网中的Kubernetes相关配置(无法访问Internet)
企业内部无法访问Internet,对于这样的企业,通过创建一个内部的私有Docker Registry,并修改一些Kubernetes配置,来启动内网中的Kubernetes集群。
1)Docker Private Registry(私有Docker镜像库)
安装参考:https://docs.docker.com/registry/deploying/
2)kubelet配置
cat /etc/kubernetes/kubelet
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
修改为:
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=kubeguide/google_containers/pause-amd64:3.0"
#systemctl restart kubelet
不能访问Internet的情况还是很少的
2.1.6Kubernetes核心服务配置详解
每个服务可以通过运行“cmd --help”命令进行查看,其中cmd为具体的服务,kube-apiserver、kube-controller-manager、kube-scheduler、kubelet、kube-proxy等,在对应的配置文件中添加“--参数名=参数取值”的语句完成参数设置。
参考官网 或 Kubernetes权威指南:从Docker到Kubernetes实践全接触(第2版)
2.1.7Kubernetes集群网络配置方案
Kubernetes本身并不会对跨主机容器网络进行设置,这需要额外的工具,除谷歌公有云GCE平台提供网络设置,开源工具包括flannel、Open vSwitch、Weave、Calico等
1)flannel(覆盖网络)
2)Open vSwitch(虚拟交换机)
3)直接路由
参考:http://blog.csdn.net/carter115/article/details/50986701
2.2 kubectl命令行工具用法详解
kubectl作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行操作。
2.2.1 kubectl用法概括
#kubectl [command] [TYPE] [NAME] [flags]
(1)command:子命令,用于操作kubernetes集群资源对象的命令,如create、delete、describe、get、apply
(2)TYPE:资源对象的类型,区分大小写,能以单数形式、复数形式或者简写形式表示。
例如以下3种TYPE是等价的
#kubectl get pod pod1
#kubectl get pods pod1
#kubectl get po pod1
(3)NAME:资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于TYPE的全部对象列表,例如kubectl get pods将返回所有pod的列表
(4)flags:可选参数,例如使用“-s”指定apiserver的URL地址而不用默认值
可操作的资源对象:
获取多个pod信息:
#kubectl get pods pod1 pod2
获取多种对象信息:
#kubectl get pod/pod1 rc/rc1
同时应用多个yaml文件:
#kubectl get pod -f pod1.yaml -f pod2.yaml
#kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
2.2.2 kubectl子命令详解
2.2.3 kubectl参数列表
2.2.4 kubectl输出格式
2.2.5 kubectl操作示例
下一博文将使用Guestbook实现Hello World
参考:
Kubernetes网络配置方案
http://blog.csdn.net/carter115/article/details/50986701
CentOS7.3.1611部署k8s1.5.2集群
http://jerrymin.blog.51cto.com/3002256/1898243