在RHEL 7上安装和配置kubernetes
2016-01-02 12:30
661 查看
本案例中使用RHEL 7.2作为宿主机的操作系统,并且使用RHEL自带的kubernetes安装包。容器之间的跨主机通信网络采用flannel实现。
架构如下:
具体的步骤如下:
一. 安装配置kube-master
1. 安装kubernetes和etcd
2. 编辑/etc/etcd/etcd.conf,确保etcd监听所有的IP地址,需要修改的配置如下:
3. 配置kube-aipserver,编辑/etc/kubernetes/apiserver,需要修改的配置如下:
注意:如果没有配置service account,需要把KUBE_ADMISSION_CONTROL中的ServiceAccount去掉
4. 启动etcd, kube-apiserver, kube-controller-manager和kube-scheduler
5. 在etcd里配置flannel网络
二. 安装配置minion
1. 在minion1和minion2上的共同配置:
1.1) 安装kubernete和和flannel
1.2) 为flannel配置etcd服务,编辑/etc/sysconfig/flanneld,修改如下内容:
1.3) 编辑/etc/kubernetes/config,修改如下内容:
2. 仅在mimion1的配置
编辑/etc/kubernetes/kubelet,修改如下内容:
3. 仅在mimion2的配置
编辑/etc/kubernetes/kubelet,修改如下内容:
4. 在minion1和minion2上启动flanneld, kube-proxy, kubelet和docker服务
三. 创建pods
1. 在kube-master上可以看到已经识别出两个nodes,并且状态都是Ready
2. 在kube-master上创建一个yaml格式的pod定义文件,命名为cirros.yaml,内容如下:
3. 创建pod,命令如下。创建过程中pod会被分配到某一个节点运行,所需的相应docker image会从docker hub获取,缺省是docker.io上的docker hub。
检查pod的状态,可以看到该pod已经处于Running状态,并且是分配到了minion2节点。
==> 注意,如果minion节点因为防火墙的原因不能访问google,上述创建会失败,因为对pod的操作需要用到image "gcr.io/google_containers/pause"来创建一个容器。解决办法是从docker.io上下一个pause镜像,然后重新tag成gcr.io/google_containers/pause,操作如下:
在minion2节点可以看到一个新的容器已经运行,并且在不断的执行pod文件里定义的ping命令。
架构如下:
具体的步骤如下:
一. 安装配置kube-master
1. 安装kubernetes和etcd
# yum -y install kubernetes etcd
2. 编辑/etc/etcd/etcd.conf,确保etcd监听所有的IP地址,需要修改的配置如下:
ETCD_NAME=default ETCD_DATA_DIR="/var/lib/etcd/default.etcd" ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
3. 配置kube-aipserver,编辑/etc/kubernetes/apiserver,需要修改的配置如下:
KUBE_API_ADDRESS="--address=0.0.0.0" KUBE_ETCD_SERVERS="--etcd_servers=http://127.0.0.1:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16" KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota"
注意:如果没有配置service account,需要把KUBE_ADMISSION_CONTROL中的ServiceAccount去掉
4. 启动etcd, kube-apiserver, kube-controller-manager和kube-scheduler
# for SERVICE in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICE systemctl enable $SERVICE done
5. 在etcd里配置flannel网络
# etcdctl mk /flannel/network/config '{"Network":"172.17.0.0/16"}'
二. 安装配置minion
1. 在minion1和minion2上的共同配置:
1.1) 安装kubernete和和flannel
# yum -y install flannel kubernetes
1.2) 为flannel配置etcd服务,编辑/etc/sysconfig/flanneld,修改如下内容:
FLANNEL_ETCD="http://kube-master:2379" FLANNEL_ETCD_KEY="/flannel/network"
1.3) 编辑/etc/kubernetes/config,修改如下内容:
KUBE_MASTER="--master=http://kube-master:8080"
2. 仅在mimion1的配置
编辑/etc/kubernetes/kubelet,修改如下内容:
KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_HOSTNAME="--hostname_override=minion1" KUBELET_API_SERVER="--api_servers=http://kube-master:8080"
3. 仅在mimion2的配置
编辑/etc/kubernetes/kubelet,修改如下内容:
KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_HOSTNAME="--hostname_override=minion2" KUBELET_API_SERVER="--api_servers=http://kube-master:8080"
4. 在minion1和minion2上启动flanneld, kube-proxy, kubelet和docker服务
# for SERVICE in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICE systemctl enable $SERVICE systemctl status $SERVICE done
三. 创建pods
1. 在kube-master上可以看到已经识别出两个nodes,并且状态都是Ready
[root@kube-master ~]# kubectl get nodes NAME LABELS STATUS minion1 kubernetes.io/hostname=minion1 Ready minion2 kubernetes.io/hostname=minion2 Ready
2. 在kube-master上创建一个yaml格式的pod定义文件,命名为cirros.yaml,内容如下:
[root@kube-master ~]# cat cirros.yaml apiVersion: v1 kind: Pod metadata: name: cirros spec: # specification of the pod’s contents restartPolicy: Never containers: - name: cirros image: "cirros" command: ["ping","www.google.com"]
3. 创建pod,命令如下。创建过程中pod会被分配到某一个节点运行,所需的相应docker image会从docker hub获取,缺省是docker.io上的docker hub。
[root@kube-master ~]# kubectl create -f cirros.yaml
检查pod的状态,可以看到该pod已经处于Running状态,并且是分配到了minion2节点。
[root@kube-master ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE NODE cirros 1/1 Running 0 4m minion2
==> 注意,如果minion节点因为防火墙的原因不能访问google,上述创建会失败,因为对pod的操作需要用到image "gcr.io/google_containers/pause"来创建一个容器。解决办法是从docker.io上下一个pause镜像,然后重新tag成gcr.io/google_containers/pause,操作如下:
# docker pull docker.io/kubernetes/pause # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.io/kubernetes/pause latest 6c4579af347b 17 months ago 239.8 kB # dock tag 6c4579af347b gcr.io/google_containers/pause:0.8.0 # dock tag 6c4579af347b gcr.io/google_containers/pause
在minion2节点可以看到一个新的容器已经运行,并且在不断的执行pod文件里定义的ping命令。
[root@mimion2 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 73c70f63faf0 cirros "ping www.google.com" 12 seconds ago Up 11 seconds k8s_cirros.f11fd195_cirros_default_48387572-b114-11e5-89b5-001c42f9db16_dfc276ef c911b2a51980 gcr.io/google_containers/pause:0.8.0 "/pause" 13 seconds ago Up 12 seconds k8s_POD.e4cc795_cirros_default_48387572-b114-11e5-89b5-001c42f9db16_285cc657 [root@mimion2 ~]# docker logs -f 73c70f63faf0 PING www.google.com (74.125.203.106): 56 data bytes 64 bytes from 74.125.203.106: seq=0 ttl=127 time=166.895 ms 64 bytes from 74.125.203.106: seq=1 ttl=127 time=192.749 ms 64 bytes from 74.125.203.106: seq=2 ttl=127 time=175.124 ms 64 bytes from 74.125.203.106: seq=3 ttl=127 time=173.619 ms
相关文章推荐
- *Group Anagrams
- 自媒体的风格
- mysql登录失败
- Android之Activity与Service通信
- htk-3.5
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料
- 理解OAuth 2.0
- LeetCode-31-Next Permutation(找规律/证明)-Medium
- EAX、ECX、EDX、EBX寄存器的作用
- 为什么设计师也要学会判断优先级?
- 第八届河南省赛D.引水工程(kruthcra+prime)
- centos下一台机器多个Mysql实例
- 用OneProxy部署MySQL数据库的读写分离
- NLP常用信息资源
- 第十四周项目2-二叉树排序树中查找的路径
- JavaScript客户端检测技术
- VimDesktop 配置
- DP 动态规划Dynamic programming
- ifcfg, ip,ss及配置文件
- Linguistic Data Consortium (LDC)