快速部署kubernetes單master集群-學習使用
阿新 • • 發佈:2018-12-10
51cto ubuntu16 主機名 以及 disabled als fir system gre 五、ubuntu16/Centos7上部署安裝k8s1.9(二進制包)
==
5.1 主機節點規劃
角色 | 主機名 | 主機ip | 組件 |
---|---|---|---|
etcd | etcd | 192.168.0.106 | etcd |
master | kube-master | 192.168.0.107 | kube-apiserver,kube-controller-manager,kube-scheduler |
node1 | kube-node1 | 192.168.0.108 | kubelet,kube-proxy,docker |
node2 | kube-node2 | 192.168.0.109 | kubelet,kube-proxy,docker |
node3 | kube-node3 | 192.168.0.110 | kubelet,kube-proxy,docker |
5.2 k8s各組件的安裝順序
- 獲取kubernetes二進制包
- 運行master組件
- 運行node組件以及安裝Docker
- 檢查集群狀態
- 測試運行Demo實例
5.2.0 初始化所有的節點信息
關閉防火墻
systemctl stop firewalld.service
systemctl disable firewalld.service
關閉selinux
setenforce 0 grep -E ‘^SELINUX=‘ /etc/sysconfig/selinux //如果是enforcing,則將其關閉 [root@node ~]# sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/‘ /etc/sysconfig/selinux [root@node ~]# grep -E ‘^SELINUX=‘ /etc/sysconfig/selinux SELINUX=disabled
創建k8s二進制執行文件和配置文件的存放目錄以及命令行程序的環境變量信息
mkdir -pv /opt/kubernetes/{bin,cfg} && echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile && source /etc/profile
5.2.1 獲取k8s二進制包
在kubernetes in github的倉庫中找到CHANGELOG-*.md
,裏面會找到各個版本的二進制文件,以及安裝K8s平臺組件的Shell安裝腳本,==註意這些腳本在安裝的時候要根據自己實際存放二進制的位置做出相應的調整
下載的文件如下
-rw-r--r--. 1 root root 15628779 Aug 4 16:41 kubernetes-client-linux-1.9.1-amd64.tar.gz
-rw-r--r--. 1 root root 418747484 Aug 4 16:41 kubernetes-server-linux-1.9.1-amd64.tar.gz
-rw-r--r--. 1 root root 2877413 Aug 4 18:28 kubernetes.tar.gz
解壓之後按照==主機節點規劃==中的說明歸檔相應的二進制程序文件
tar xf kubernetes-client-linux-1.9.1-amd64.tar.gz
tar xf kubernetes-server-linux-1.9.1-amd64.tar.gz
tar xf kubernetes.tar.gz
解壓之後,三個壓縮包文件解壓後都會存放在同一個叫做Kubernetes的目錄中
==準備kube-master節點運行的文件==
cp /root/kubernetes/cluster/centos/master/scripts/{apiserver.sh,controller-manager.sh,scheduler.sh} /opt/kubernetes/
cp /root/kubernetes/server/bin/{kube-controller-manager,kube-scheduler,kube-apiserver,kubectl} /opt/kubernetes/bin/
==準備kube-node節點運行的文件==
cp /root/kubernetes/cluster/centos/node/scripts/{proxy.sh,kubelet.sh} /opt/kubernetes/
cp /root/kubernetes/server/bin/{kubelet,kube-proxy} /opt/kubernetes/bin
5.2.2 安裝配置ETCD
因為是測試環境,我們暫且安裝一個etcd單節點
yum install epel-release -y
yum install etcd
[root@etcd ~]# cat /etc/etcd/etcd.conf |awk ‘{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}‘
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://192.168.0.106:2379"
ETCD_NAME="k8setcd"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.0.106:2379"
systemctl start etcd
systemctl status etcd
systemctl enable etcd
journalctl -u etcd //查看日誌
5.2.3 運行master組件
- 首先運行apiserver.sh
- 其次是scheduler.sh
- 再者是controller-manager.sh
==腳本中需要註意的地方==
- 腳本中的對應的MASTER_ADDRESS,ETCD_SERVERS,以及NODE_ADDRESS都有默認的值,如果我們在此修改成我們自己對應的信息ip,腳本運行不用添加參加,否則需要安裝腳本中的順序添加腳本參數
- 腳本中指定二進制以及組件的配置信息的存儲位置,可以按情況修改
修改apiserver.sh腳本
[root@master kubernetes]# cat apiserver.sh |awk ‘{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}‘
MASTER_ADDRESS=${1:-"192.168.0.107"}
ETCD_SERVERS=${2:-"https://192.168.0.106:2379"}
SERVICE_CLUSTER_IP_RANGE=${3:-"10.10.10.0/24"}
ADMISSION_CONTROL=${4:-""}
cat <<EOF >/opt/kubernetes/cfg/kube-apiserver
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=4"
KUBE_ETCD_SERVERS="--etcd-servers=${ETCD_SERVERS}"
KUBE_API_ADDRESS="--insecure-bind-address=192.168.0.107"
KUBE_API_PORT="--insecure-port=8080"
NODE_PORT="--kubelet-port=10250"
KUBE_ADVERTISE_ADDR="--advertise-address=${MASTER_ADDRESS}"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=${SERVICE_CLUSTER_IP_RANGE}"
KUBE_ADMISSION_CONTROL="--admission-control=${ADMISSION_CONTROL}"
EOF
KUBE_APISERVER_OPTS=" \${KUBE_LOGTOSTDERR} \ \${KUBE_LOG_LEVEL} \ \${KUBE_ETCD_SERVERS} \ \${KUBE_ETCD_CAFILE} \ \${KUBE_ETCD_CERTFILE} \ \${KUBE_ETCD_KEYFILE} \ \${KUBE_API_ADDRESS} \ \${KUBE_API_PORT} \ \${NODE_PORT} \ \${KUBE_ADVERTISE_ADDR} \ \${KUBE_ALLOW_PRIV} \ \${KUBE_SERVICE_ADDRESSES} \ \${KUBE_ADMISSION_CONTROL} \ \${KUBE_API_CLIENT_CA_FILE} \ \${KUBE_API_TLS_CERT_FILE} \ \${KUBE_API_TLS_PRIVATE_KEY_FILE}"
cat <<EOF >/usr/lib/systemd/system/kube-apiserver.service
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
ExecStart=/opt/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable kube-apiserver
systemctl restart kube-apiserver
運行kube-master節點上組件的腳本
//因為我們修改過腳本,因此這些參數加不加都無所謂
/opt/kubernetes/apiserver.sh 192.168.0.107 http://192.168.0.106:2379
/opt/kubernetes/scheduler.sh 192.168.0.107
/opt/kubernetes/controller-manager.sh 192.168.0.107
檢查進程
[root@master kubernetes]# ps -ef | grep kube | grep -v grep
root 2280 1 2 17:20 ? 00:04:32 /opt/kubernetes/bin/kube-apiserver --logtostderr=true --v=4 --etcd-servers=http://192.168.0.106:2379 --insecure-bind-address=192.168.0.107 --insecure-port=8080 --kubelet-port=10250 --advertise-address=192.168.0.107 --allow-privileged=false --service-cluster-ip-range=10.10.10.0/24 --admission-control=
root 2404 1 1 17:23 ? 00:01:53 /opt/kubernetes/bin/kube-scheduler --logtostderr=true --v=4 --master=192.168.0.107:8080 --leader-elect
root 2554 1 1 17:25 ? 00:03:16 /opt/kubernetes/bin/kube-controller-manager --logtostderr=true --v=4 --master=192.168.0.107:8080 --leader-elect
5.2.4 查看日誌的方式
- k8s組件的日誌信息默認輸出到系統的日誌中,centos系統在
/var/log/message
,ubuntu系統在/var/log/syslog
- 使用journalctl查看,比如查看apiserver的日誌
[root@master ~]# journalctl -u kube-apiserver -- Logs begin at 六 2018-08-04 18:19:18 CST, end at 六 2018-08-04 20:06:56 CST. -- 8月 04 18:19:18 master kube-apiserver[2280]: I0804 18:19:18.706331 2280 get.go:238] Starting watch for /apis/extensions/v1beta1/da 8月 04 18:19:18 master kube-apiserver[2280]: I0804 18:19:18.718459 2280 wrap.go:42] GET /api/v1/namespaces/default: (2.497133ms) 2 8月 04 18:19:18 master kube-apiserver[2280]: I0804 18:19:18.722771 2280 wrap.go:42] GET /api/v1/namespaces/default/services/kubern 8月 04 18:19:18 master kube-apiserver[2280]: I0804 18:19:18.727262 2280 wrap.go:42] GET /api/v1/namespaces/default/endpoints/kuber 8月 04 18:19:19 master kube-apiserver[2280]: I0804 18:19:19.013099 2280 wrap.go:42] GET /api/v1/namespaces/kube-system/endpoints/k
5.2.5 運行kube-node組件
/opt/kubernetes/kubelet.sh
/opt/kubernetes/proxy.sh
[root@node kubernetes]# ps -ef | grep kube|grep -v grep
root 2821 1 2 18:41 ? 00:02:08 /opt/kubernetes/bin/kubelet --logtostderr=true --v=4 --address=192.168.0.108 --port=10250 --hostname-override=192.168.0.108 --kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig --allow-privileged=false --cluster-dns=192.168.0.1 --cluster-domain=cluster.local
root 2955 1 0 18:43 ? 00:00:13 /opt/kubernetes/bin/kube-proxy --logtostderr=true --v=4 --hostname-override=192.168.0.108 --master=http://192.168.0.107:8080
5.2.6 檢查k8s平臺組件信息
[root@master ~]# kubectl get componentstatus
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health": "true"}
5.2.7 部署一個nginx
kubectl run nginx --image=nginx --replicas=3
六、學習場景
- 使用play with k8s
- 部署一個雲原生的k8s實驗環境
- 在Centos上部署k8s
- http://blog.51cto.com/bigboss/2153651
- https://zhangguanzhang.github.io/2018/08/03/Kubernetes_install_1.11.1/
- Ansible一鍵部署k8s
- kubernetes1.8部署方案:https://blog.qikqiak.com/post/manual-install-high-available-kubernetes-cluster/
- kubernetes1.10部署方案:https://zhangguanzhang.github.io/2018/05/05/Kubernetes_install/
- kubernetes1.11部署方案:https://zhangguanzhang.github.io/2018/08/03/Kubernetes_install_1.11.1/
快速部署kubernetes單master集群-學習使用