kubernetes環境搭建
一.環境準備
三臺vm虛擬機器(centos7)
192.168.125.164 node1
192.168.125.165 node2
192.168.125.166 node3
1.各節點修改各自的主機名(hostnamectl set-hostname node1),並將上面的內容新增到/etc/hosts中。
2.各節點安裝kubernetes #yum -y install kubernetes ,目前是kubernetes.x86_64 0:1.5.2-0.5.gita552679.el7版本
3.在master節點上安裝etcd #yum -y install etcd ,目前是3.1.3-1.el7版本
4.將各節點的防火牆關閉
#systemctl disable firewalld
#systemctl stop firewalld
二.配置
1.每個節點修改/etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.125.164:8080"
KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.125.164:4001"
2.在master節點上vi /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_API_PORT="--port=8080"
3.在master啟動服務
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler;do
systemctl restart $SERVICES
systemctl enable $SERVICES
systemctl status $SERVICES
done
將上面的儲存成sh執行
#ps -ef|grep kube //從程序中檢視前面的引數配置是否生效
4.在node節點修改vi /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250" (可不用解開註釋,預設即可)
KUBELET_HOSTNAME="--hostname-override=node2"
KUBELET_API_SERVER="--api-servers=http://192.168.125.164:8080"
5.node節點機啟動kube-proxy和kubelet,docker服務即可。
啟動中可通過#tail -f /var/log/messages |grep kube來排查問題
三. 驗證
在master節點執行kubectl get nodes ,檢視到節點註冊成功,則表明系統安裝正常
#kubectl cluster-info // 檢視cluster info資訊
四.master上的kubectrl命令為管理叢集的命令
其中用的最多的就是資源管理命令:get //list資源,也是查詢
describe //查詢具體,相信的資訊
create
replace
patch
delete
#kubectl describe --help //檢視幫助
#kubectl get namespace //這裡的namespace不是用來隔離的,而是用來實現不用租戶的資源配額。
五.釋出個nginx應用
vi nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
#kubectl create -f nginx-pod.yaml
此時提示
Error from server (ServerTimeout): error when creating "nginx-pod.yaml": No API token found for service account "default", retry after the token is automatically created and added to the service account
解決:
修改master節點上的/etc/kubernetes/apiserver 檔案,去掉vi /etc/kubernetes/apiserver 中的“ServiceAccount”,儲存,重啟api-server服務(#systemctl restart kube-apiserver)
然後可以通過# kubectl get pods 檢視pod進展
也可以通過# kubectl describe pods nginx 檢視詳細
注意:create資源之前,需要先將/etc/kubernetes/kubelet中的那個 映象 先下載到各個節點上(如registry.access.redhat.com/rhel7/pod-infrastructure:latest)。
六.建立Kubernetes覆蓋網路
Kubernetes的網路模型要求每個Pod都擁有一個扁平化共享網路名稱空間的IP,Pod之間能夠通過跨主機通訊,要實現這種需求,需要在Kubernetes叢集中建立一個覆蓋網路來聯通各個節點,目前可以通過第三方網路外掛來建立覆蓋網路,如Flannel,Open vSwitch(OVS)和 calico.
Flannel
i.在每臺節點進行安裝#yum install flannel ,當前是flannel.x86_64 0:0.7.0-1.el7版本
ii.修改配置檔案 /etc/sysconfig/flanneld,
FLANNEL_ETCD_ENDPOINTS="http://192.168.125.164:2379" (如果叢集每個節點都安裝了etcd的話這裡就可以保持預設,我這裡是就在master節點安裝了etcd)
FLANNEL_ETCD_PREFIX="/atomic.io/network" --------可以保持預設
iii.執行etcdctl mkdir /atomic.io/network && etcdctl set /k8s/network/config '{"Network":"172.200.0.0/16"}'(在etcd中建立目錄及config配置檔案,docker執行的container例項的地址,都在 172.200.0.0/16網段中)
flanneld會讀取/atomic.io/network目錄中config值,然後接管docker的地址分配,並把docker和宿主機之間的網路橋接起來。、
注意:如果執行命令出現
Error: client: etcd cluster is unavailable or misconfigured
error #0: dial tcp 127.0.0.1:2379: getsockopt: connection refused
error #1: dial tcp 127.0.0.1:4001: getsockopt: connection refuse
解決辦法:vi /etc/etcd/etcd.conf
ETCD_LISTEN_CLIENT_URLS="http://127.0.0.1:2379,http://192.168.125.164:2379",儲存,重啟etcd服務
vi.執行 #systemctl enable flanneld.service
#systemctl stop docker
#systemctl star flanneld.service
#systemctl star docker
注意:後續確保系統啟動時flannel需要遭遇docker服務(可將docker服務systemctl disable docker)
整合calico網路
i.準備工作:
. 每個節點修改/etc/kubernetes/config中的 KUBE_ALLOW_PRIV="--allow-privileged=true" ,不然釋出calico.yaml時報錯
The DaemonSet "calico-node" is invalid: spec.template.spec.containers[0].securityContext.privileged: Forbidden: disallowed by policy
.因為用到quay.io/calico/node:v1.0.2,calico/cni:v1.5.6映象,為了加快部署速度,可以現在每個節點docker pull下來。
ii.配置安裝
.下載calico.yaml,地址為http://docs.projectcalico.org/v2.0/getting-started/kubernetes/installation/hosted/calico.yaml
.修改calico.yaml檔案中的etcd的地址
etcd_endpoints: "http://192.168.125.164:2379"
.通過#kubectl apply -f calico.yaml部署上去
七.kubernetes相關元件安裝
1.dashboard
#kubectl create -f https://git.io/kube-dashboard-no-rbac
出現的問題“Error syncing pod, skipping: failed to "StartContainer" for "kubernetes-dashboard" with ImagePullBackOff: "Back-off pulling image \"gcr.io/google_containers/kubernetes-dashboard-amd64:v1.6.0\""”
解決辦法:
方法一:翻牆
方法二:修改hosts檔案(這裡我用的是“61.91.161.217 gcr.io”,但是可能會失效)
方法三:從其他源下載該容器,然後打tag為“gcr.io/。。。。”