摘要
本文部分内容来源于网络,个人收集整理,请勿传播
时间跨越有点久了,之前的实验和文章都没有写完,最近重新开始趟这个坑。
docker安装
请移步 docker安装学习记录
kubernetes
本节讲以两种方式安装kubernets(一下简称k8s)集群;
- 使用kubeadm创建集群
- 使用二进制包创建集群
由于k8s集群搭建过程中需要去google的仓库拉取一些镜像,而这个仓库在国内是访问不到的,所以可以使用以下两种解决办法
- 科学上网
- 使用dockerhub构建,请移步 kubeadm 搭建 Kubernetes 集群
第一种方式搭建集群比较简单,主要服务都是以容器的方式运行的;
第二种方式搭建起来麻烦一点,优点是可以了解整个集群的组件架构;
下面的内容是两种搭建方式公用的部分。
使用repo安装 kubectl、kubelet and kubeadm
centos7
1 | # 阿里源 |
ubuntu
1 | apt-get update && apt-get install -y apt-transport-https |
修改内核参数
1 | vim /etc/sysctl.conf |
环境配置
1 | rm -r -f /etc/kubernetes /var/lib/kubelet /var/lib/etcd; |
使用kubeadm构建k8s集群
修改配置
1 | vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf |
初始化集群
1 | kubeadm init \ |
集群初始化会去拉取镜像,如果已经提前处理好,正常执行几分钟就应该初始化完成。
1 | [kubeadm] WARNING: kubeadm is in beta, please do not use it for production clusters. |
配置config
根据提示执行以下命令
1 | mkdir -p $HOME/.kube |
Master Isolation
由于安全原因,默认情况下pod不会被schedule到master节点上,可以通过下面命令解除这种限制
1 | kubectl taint nodes --all node-role.kubernetes.io/master- |
添加node节点
1 | # 可以查看集群token |
检查状态
1 | kubectl get node |
此时dns应该处于Pending状态,是因为没有安装管理pod的网络模块,如果没有可控制的node节点也会处于此状态。
安装flannel管理pod网络
1 | kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel-rbac.yml |
查看状态
1 | kubectl get po -o wide -n kube-system |
修改配置
1 | vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf |
kube-dashboard
获取yml文件
1 | curl https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml > kubernetes-dashboard.yaml |
启动
1 | kubectl create -f kubernetes-dashboard.yaml |
Kubernetes 1.6开始API Server启用了RBAC授权,kubernetes-dashboard.yaml中并未定义需要授权的ServiceAccount,如果访问Dashborad:http://ClusterIP:NodePort会被拒绝。
ServiceAccount的配置以后再说,目前还是有一些问题没有解决
使用二进制文件部署k8s
etcd集群安装
本文使用静态配置的方式搭建,详细操作以及介绍请移步 etcd-cluster 部署
安装etcd
1 | ETCD_VER="v3.2.4" |
静态配置
静态配置主要预先将集群的配置信息分配好,然后将集群分布启动,集群将根据配置信息组成集群。这里按如下的配置信息分别启动三个etcd。
1 | mkdir /data/bin -p && cd /data/bin && touch etcd.sh |
配置supervisor
详情请移步 etcd-cluster 部署
1 | mkdir -p /etc/supervisor/conf.d/ |
环境变量配置
本文最开始使用的是etcd2接口,目前etcd3接口变化比较大,所以现在直接重新按照etcd3的接口进行配置
1 | cd /data/bin && vim etcd.env |
集群验证
按如上配置分别启动集群,启动集群后,将会进入集群选举状态,若出现大量超时,则需要检查主机的防火墙是否关闭,或主机之间是否能通过2380端口通信,集群建立后通过以下命令检查集群状态。
1 | etcdctl member list -w table |
在其中一个节点执行
1 | # api2 |
其他节点执行有正常返回结果说明集群搭建成功
1 | etcdctl get /k8s/network/config |
该命令含义是,期望docker运行的container实例的地址,都在 172.100.0.0/16网段中
flanneld会读取/k8s/network目录中config值,然后接管docker的地址分配,并把docker和宿主机器之间的网络桥接起来。
flannel
安装flannel
1 | FLANNEL_VERSION="v0.8.0" |
启动flannel
1 | cd /data/bin && touch flanneld.sh |
supervisor
1 | vim /etc/supervisor/conf.d/flanneld.conf |
docker配置
1 | source /run/flannel/subnet.env |
安装k8s
1 | KUB_VERSION="v1.7.2" |
启动k8s集群
Master
1 | mkdir /data/logs/k8s/{apiserver,controller-manager,scheduler} -p |
master-supervisor
1 | cd /etc/supervisor/conf.d/ && touch kube-api.conf kube-con.conf kube-sche.conf |
node
1 | mkdir /data/logs/k8s/{kubelet,proxy} -p |
node-supervisor
1 | cd /etc/supervisor/conf.d/ && touch kubelet.conf kube-proxy.conf |
配置skydns
1 | etcdctl mk /skydns/config '{"dns-addr":"172.100.81.2:53","ttl":3600,"domain":"sky."}' |
附录
1 | docker容器所依赖的六种namespace级别的资源隔离技术: |