模塊
|
機器
|
配置
|
備註
|
域名
|
---|---|---|---|---|
master | 172.31.101.175 172.31.101.176 172.31.101.177 |
4G內存 4核CPU |
etcd、kube-apiserver、kube-scheduler、kube-controller-manager、flannel | |
node | 172.31.101.172 |
8G內存 |
kubelet、kube-proxy、docker、flannel | |
node | 172.31.101.115 |
32G內存 |
kubelet、kube-proxy、docker、flannel |
master節點能夠不安裝 docker的,可是須要安裝flannel,不然一些轉發請求很差使。github
採用CentOS 7系統,線下的yum.repos.d的配置和線上不同,致使安裝的一些軟件不是最新的。須要作以下操做:docker
獨立的數據盤 /data 必須是ext4格式的,不然會有問題json
rpm --
import
https:
//www
.elrepo.org
/RPM-GPG-KEY-elrepo
.org
rpm -Uvh http:
//www
.elrepo.org
/elrepo-release-7
.0-2.el7.elrepo.noarch.rpm
yum -y
install
yum-plugin-fastestmirror
yum -y --enablerepo=elrepo-kernel
install
kernel-ml
grub2-
set
-default 0
|
升級到4.x版本以後,和systemd/kubelet/docker的配合有問題,暫時先回退到3.x後端
cat
/etc/docker/daemon
.json
{
"storage-driver"
:
"overlay"
,
"live-restore"
:
true
,
}
|
# docker相關信息會存儲在 /var/lib/docker 下
mv
/var/lib/docker
/data/
ln
-sf
/data/docker
/var/lib/docker
# pod相關信息會存儲在 /var/lib/kubelet 下,若是沒有這個目錄,請先建立
mv
/var/lib/kubelet
/data/
ln
-sf
/data/kubelet
/var/lib/kubelet
|
修改 /etc/sysconfig/docker 文件
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false'
INSECURE_REGISTRY='--insecure-registry reg.firstshare.cn'
因爲master和node之間有頻繁的網絡操做,並且在內網使用,因此關閉防火牆,避免影響效率
yum -y install etcd,目前版本是3.1.0.
配置參考文檔: https://coreos.com/etcd/docs/3.1.4/op-guide/clustering.html
|
位置
|
備註
|
---|---|---|
機器 | 172.31.101.175/176/177 | 至少3臺構成一個cluster,經過 http://etcd02.firstshare.cn 訪問 |
配置 | /etc/etcd/etcd.conf | |
數據 | /data/etcd-storage | 須要修改成 etcd 帳戶可讀寫 |
服務 | /usr/lib/systemd/system/etcd.service | |
帳戶 | etcd | 不用root帳戶啓動 |
自啓動 | systemctl enable etcd | 重啓後自動運行etcd |
備份 | ||
監控 |
172.31.101.175
|
172.31.101.176
|
172.31.101.177
|
---|---|---|
ETCD_NAME=vlnx101175 |
ETCD_NAME=vlnx101176 |
ETCD_NAME=vlnx101177 |
運行命令 etcdctl cluster-health 檢查是否工做正常
從老的k8s集羣172.31.101.119:/key1 目錄拷貝證書等文件到全部的master節點的 /etc/kubernetes/ssl/ 目錄下。配置說明以下
文件名
|
說明
|
---|---|
basic_auth.csv | basic auth user and password |
ca.crt | Certificate Authority cert |
known_tokens.csv | tokens that entities (e.g. the kubelet) can use to talk to the apiserver |
kubecfg.crt | Client certificate, public key |
kubecfg.key | Client certificate, private key |
server.cert | Server certificate, public key |
server.key | Server certificate, private key |
運行 yum -y install kubernetes-master 命令,目前安裝的是1.5.2,咱們先用它把service相關的東西都配置好,而後手動升級到1.6.0的最新版本。
能夠經過rpm -ql kubernetes-master 來看都安裝了哪些文件
到 /etc/kubernetes/ 目錄下修改配置
文件名
|
內容
|
備註
|
---|---|---|
文件名
|
內容
|
備註
|
config | KUBE_LOGTOSTDERR="--logtostderr=true" |
|
apiserver | KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" |
支持ssl/bash/token等安全認證 |
controller-manager | KUBE_CONTROLLER_MANAGER_ARGS="--leader-elect=true \ |
必須設置認證方式,不然建立deploy的時候會報錯: |
scheduler | KUBE_SCHEDULER_ARGS="--leader-elect=true \ |
systemctl daemon-reload
systemctl
enable
kube-apiserver
systemctl
enable
kube-scheduler
systemctl
enable
kube-controller-manager
|
systemctl start kube-apiserver
systemctl start kube-scheduler
systemctl start kube-controller-manager
|
運行命令 kubectl get componentstatuses 檢查組件是否正常
apiserver 是無狀態的,因此對於多個節點而言能夠經過前端擋一層 nginx 、haproxy 等實現高可用和負載均衡,而對於 scheduler 和 controller-managere 而言,它們須要操做後端存儲 etcd,是有狀態的,爲了減小同步操做後端存儲帶來的數據不一致性,3 個 節點 的scheduler 和 controller-manager 組件同時只有一個提供服務,具體的實現就是3個節點之間會進行一個 leader 的選舉,只有 leader 節點才提供服務。所以,驗證選舉工做是否正常也是很是重要的。
查看當前 3 個 shcduler和controller-manager 哪一個是 leader 節點:
kubectl get endpoints kube-controller-manager --namespace=kube-system -o yaml
下載路徑:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#downloads-for-v160
到上面路徑下載 kubernetes-server-linux-amd64.tar.gz 文件,而後上傳到服務器上,解壓縮到 /opt/fs/kubernetes 目錄,把 bin 目錄的文件複製到 系統 /bin/ 目錄下。
注意事項:
而後重啓master相關服務就能夠了
運行 yum -y install kubernetes-node 命令,目前安裝的是1.5.2,咱們先用它把service相關的東西都配置好,而後手動升級到1.6.0的最新版本。
yum -y
install
flannel
systemctl daemon-reload
systemctl
enable
flanneld
systemctl start flanneld
|
修改 /etc/sysconfig/flanneld 配置文件,配置etcd的地址
FLANNEL_ETCD_ENDPOINTS="http://172.31.101.175:2379,http://172.31.101.176:2379,http://172.31.101.177:2379"
FLANNEL_ETCD_PREFIX="/atomic.io/network"
在master的機器上,修改etcd設置flannel的網段。 (SubnetLen指定分配給每一個Node節點上Pod網絡的掩碼位數,從而在網絡上間接決定了每一個node上可運行的pod數,參考文檔;https://github.com/coreos/flannel/blob/master/Documentation/configuration.md)
etcdctl set /atomic.io/network/config '{ "Network": "10.132.0.0/16","SubnetLen":24 }'
這樣每一個node節點上的flanneld啓動的時候,會自動分配對應網段的地址並註冊到etcd中。
在啓動flannel後,每一個node節點的bip範圍是自動分配的,不須要再docker的配置文件中指明。
修改docker的配置文件,指明cgroup用systemd
OPTIONS='--selinux-enabled=false --log-driver=journald --signature-verification=false'
if [ -z "${DOCKER_CERT_PATH}" ]; then
DOCKER_CERT_PATH=/etc/docker
fi
INSECURE_REGISTRY='--insecure-registry reg.firstshare.cn'
|
經由所在主機的docker0虛擬網卡轉發到flannel0虛擬網卡,這是個P2P的虛擬網卡,flanneld服務監聽在網卡的另一端。
Flannel經過Etcd服務維護了一張節點間的路由表。
到 /etc/kubernetes/ 目錄下修改配置
文件名
|
內容
|
備註
|
---|---|---|
config | KUBE_LOGTOSTDERR="--logtostderr=true" |
不須要配置override-hostname,直接使用本機hostname就能夠了 |
kubelet | KUBELET_ADDRESS="--address=0.0.0.0" KUBELET_API_SERVER="--kubeconfig=/var/lib/kubelet/kubeconfig" KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest" KUBELET_ARGS="--cgroup-driver=systemd --require-kubeconfig --cluster_dns=10.137.254.254 --cluster_domain=cluster.local" |
必須配置cgroup-driver=systemd,不然沒法啓動 註釋KUBELET_HOSTNAME配置或者修改值爲node的真實hostname, 不然master上 kubectl get node只會顯示一個127.0.0.1 |
proxy | KUBE_PROXY_ARGS="" | |
kubeconfig | apiVersion: v1 |
/var/lib/kubelet/kubeconfig |
cat /usr/lib/systemd/system/docker.service
cat /usr/lib/systemd/system/kubelet.service
systemctl daemon-reload
systemctl
enable
flanneld
systemctl
enable
docker
systemctl
enable
kube-proxy
systemctl
enable
kubelet
|
systemctl start flanneld
systemctl start docker
systemctl start kube-proxy
systemctl start kubelet
|
下載路徑:https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG.md#downloads-for-v160
到上面路徑下載 kubernetes-server-linux-amd64.tar.gz 文件,而後上傳到服務器上,解壓縮到 /opt/fs/kubernetes 目錄,把 bin 目錄的文件複製到 系統 /bin/ 目錄下。
注意事項:
而後重啓node相關服務就能夠了
在 master 節點上,運行命令 kubectl get node ,若是顯示node爲 NotReady, 則把全部node節點都重啓reboot一下才可能恢復正常。
kubernetes 1.6.0 高可靠集羣部署 https://www.addops.cn/post/kubernetes-deployment.html
kubernetes + etcd ssl 支持 https://www.addops.cn/post/tls-for-kubernetes-etcd.html
kubernetes 中的服務發現和負載均衡 https://www.addops.cn/post/kubernetes_service_discovery.html
用 Flannel 配置 Kubernetes 網絡 http://dockone.io/article/1186
DockOne技術分享(十八):一篇文章帶你瞭解Flannel http://dockone.io/article/618
kubernetes 搭建過程當中遇到的問題 http://www.cnblogs.com/ivictor/p/4998032.html
CentOS 7 禁用ipv6 http://blog.csdn.net/bluishglc/article/details/41390785
和我一塊兒一步步搭建k8s集羣 https://github.com/opsnull/follow-me-install-kubernetes-cluster