1. 系統環境
操作系統:
CentOS 7
KV存儲系統,用於集羣的共享配置和服務發現(類似ZooKeeper):
etcd 3.1.0
容器管理工具:
Kubernetes 1.5.2
應用容器引擎
Docker 1.12.6
網絡規劃工具,統一分配集羣Docker容器的虛擬IP,並實現服務之間通信:
Flannel 0.7.0
服務器 | 服務 |
---|---|
master | apiserver, controller-manager, scheduler |
node | flannel, docker, kubelet, kube-proxy |
etcd | etcd |
2. 基本環境配置
- 設置hosts
192.168.89.133
master
192.168.89.133
etcd
192.168.89.134
node1
PS:由於在虛擬機上面部署,所以只啓動兩臺服務器,並且etcd和master運行在同一個物理機器上 - 關閉防火牆
systemctl stop firewalld.service
systemctl disable firewalld.service
PS:第一個命令關閉防火牆,第二個命令使開機不啓動防火牆(永久關閉) - 永久關閉SELinux
修改/etc/selinux/config
SELINUX=disabled
- 重啓機器
reboot
3. 安裝和配置etcd
3.1 安裝etcd
yum install etcd -y
3.2 配置etcd
修改/etc/etcd/etcd.conf
中的部分屬性
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379"
PS:其中etcd
表示etcd服務器主機名
3.3 運行etcd
systemctl start etcd
systemctl enable etcd
3.4 配置etcd內網信息
etcdctl -C 192.168.89.133:2379 set /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
PS:其中網絡號172.17.0.0/16
與docker中的docker0網絡一致(若不一致,可修改docker0網絡或者配置上述etcd網絡);atomic.io
與下面的Flannel配置中的FLANNEL_ETCD_PREFIX
對應
4.master服務器上安裝服務
4.1 安裝kubernetes-master
yum install kubernetes-master
4.2 配置apiserver
修改/etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://etcd:2379"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
PS:測試時需要把KUBE_ADMISSION_CONTROL
中的SecurityContextDeny
和ServiceAccount
去掉,這是權限相關的
4.3 配置全局配置文件
修改/etc/kubernetes/config
KUBE_MASTER="--master=http://master:8080"
4.4 設置開機啓動並啓動master服務
systemctl enable kube-apiserver kube-scheduler kube-controller-manager
systemctl start kube-apiserver kube-scheduler kube-controller-manager
4.5 測試master服務
訪問http://master:8080會返回json描述信息,如下圖:
5.node1工作節點上安裝服務
5.1 安裝docker
yum install docker
5.2 安裝flannel
yum install flannel
5.3 配置flannel
修改/etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://etcd:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
PS:其中atomic.io
與上面etcd中的Network
對應
5.4 安裝kubernetes-node
yum install kubernetes-node
5.5 配置全局配置文件
修改/etc/kubernetes/config
KUBE_MASTER="--master=http://master:8080"
5.6 配置kubelet組件
修改/etc/kubernetes/kubelet
KUBELET_HOSTNAME="--hostname-override=node1"
KUBELET_API_SERVER="--api-servers=http://master:8080"
5.7 配置開機啓動並啓動服務
systemctl enable kubelet kube-proxy
systemctl start kubelet kube-proxy
6.測試集羣是否工作
在master節點運行
kubectl get nodes
若正常工作,可獲取工作節點信息及運行狀態爲Ready,如下圖:
7.發佈nginx服務
7.1 創建pod : nginx-pod.yaml
kubectl create -f nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
7.2 查看pod的狀態
kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-pod 0/1 ContainerCreating 0 6s
等10分鐘再試
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 13m
PS:這裏經常會因爲網絡問題失敗,可以先使用docker手動pull鏡像後再使用kubectl來create pod,如果還是不行,就delete pod之後再create pod,實在不行,可以重啓機器試試,還是不行,那就是配置出問題了
7.3 創建replicationController : nginx-rc.yaml
kubectl create -f nginx-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx-rc
spec:
replicas: 1
selector:
name: nginx-pod
template:
metadata:
labels:
name: nginx-pod
spec:
containers:
- name: nginx-pod
image: nginx
ports:
- containerPort: 80
7.4 查看ReplicationController狀況
7.5 創建service : nginx-service.yaml
kubectl create -f nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
ports:
- port: 80
nodePort: 30001
selector:
name: nginx-pod
7.6 查看service狀態
PS:其中Kubernetes服務爲Kube系統自帶服務,無需理會
7.7 測試發佈的nginx服務
使用其他機器的瀏覽器訪問node1機器的30001端口
8. 相關文章
Kubernetes 1.5部署安裝dashboard
Kubernetes中的nodePort,targetPort,port的區別和意義
9. 參考
西樓:https://my.oschina.net/zhougui/blog/824165
督門提酒的博客:
http://blog.csdn.net/u010884123/article/details/56485246?locationNum=10&fps=1
10. yaml源碼
https://github.com/HeYongbiao/kube_nginx
11. 學習資料
kubernetes指南:http://pan.baidu.com/s/1gfKHDAF 密碼:who6