kubernetes:一個管理容器組的工具,具有先進的調度能力
[Docker生態系統系列之一:常用組件介紹](https://yq.aliyun.com/articles/224629?spm=a2c4e.11153959.blogcont11035.12.5883ee043iKaV6)
[kubernetes1.9離線部署](https://segmentfault.com/a/1190000012755243)
### 一、準備
#### 1. 前提
> 先安裝etcd環境,etcd可以是集群,可以是單點。然后安裝flannel。
flannel在 node上都需要安裝。master可以不安裝。
>當然,可以在master的機器上作為一個node。只需要安裝node的要求安裝所需服務。
#### 2. 節點所需
| master | node |
| ------------- |:-------------:|
| kube-apiserver | kubelet |
| kube-controller-manager | kube-proxy|
| kube-scheduler | .... |
#### 3. Kubernetes下載
[下載地址](https://github.com/kubernetes/kubernetes/releases?after=v1.7.12-beta.0)
> 下載二進制文件由于訪問外網,網絡原因可能下載不了。可以編譯源代碼獲取二進制部署文件。
見[編譯kubernetes](build_kubernetes.md)
**獲取到二進制安裝包之后,將相關可執行文件拷貝到/usr/bin/目錄中。**
```
kube-apiserver
kube-controller-manager
kube-scheduler
kubectl
kube-proxy
```
### 二、Kubernetes安裝配置
#### 1. Kubernetes通用配置文件
- 創建 Kubernetes 配置目錄
```
sudo mkdir /etc/kubernetes
```
- 創建 Kubernetes 通用配置
```
sudo vim /etc/kubernetes/config
```
```
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://{master}:8080"
```
#### 2. 配置kube-apiserver服務
在Kubernetes的master主機上
```
sudo vim /etc/kubernetes/apiserver
```
```
###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
#
# The address on the local server to listen to.
KUBE_API_ADDRESS="--address=0.0.0.0"
#KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"
# The port on the local server to listen on.
KUBE_API_PORT="--port=8080"
# Port minions listen on
KUBELET_PORT="--kubelet-port=10250"
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS="--etcd-servers=http://{ectd_ip}:2379"
# Address range to use for services
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range={192.168.4.0/24}"
# default admission control policies
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
# Add your own!
KUBE_API_ARGS=""
```
KUBE_SERVICE_ADDRESSES 配置為etcd創建的可用網段地址
- 創建systemd文件
```
sudo vim /lib/systemd/system/kube-apiserver.service
```
```
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
After=etcd.service
Wants=etcd.service
[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/apiserver
ExecStart=/usr/bin/kube-apiserver \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_ETCD_SERVERS \
$KUBE_API_ADDRESS \
$KUBE_API_PORT \
$KUBELET_PORT \
$KUBE_ALLOW_PRIV \
$KUBE_SERVICE_ADDRESSES \
$KUBE_ADMISSION_CONTROL \
$KUBE_API_ARGS
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
```
#### 3. 配置kube-controller-manager服務
```
sudo vim /etc/kubernetes/controller-manager
```
```
KUBE_CONTROLLER_MANAGER_ARGS=""
```
- 創建systemd文件
```
sudo vim /lib/systemd/system/kube-controller-manager.service
```
```
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=etcd.service
After=kube-apiserver.service
Requires=etcd.service
Requires=kube-apiserver.service
[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/controller-manager
ExecStart=/usr/bin/kube-controller-manager \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_MASTER \
$KUBE_CONTROLLER_MANAGER_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
```
#### 4. 配置kube-scheduler服務
```
sudo vim /etc/kubernetes/scheduler
```
```
KUBE_SCHEDULER_ARGS=""
```
- 創建systemd文件
```
sudo vim /lib/systemd/system/kube-scheduler.service
```
```
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
User=root
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/scheduler
ExecStart=/usr/bin/kube-scheduler \
$KUBE_LOGTOSTDERR \
$KUBE_MASTER
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
```
#### 5. 啟動Kubernetes master節點的服務
```
sudo systemctl daemon-reload
sudo systemctl enable kube-apiserver kube-controller-manager kube-scheduler
sudo systemctl start kube-apiserver kube-controller-manager kube-scheduler
```
#### 6. Kubernetes node配置
Kubernetes node節點也需要配置 **/etc/kubernetes/config** 文件,內容與Kubernetes mater節點一致。
#### 7. 配置kubelet服務
每個節點都需要配置。
在kubernetes集群中,每個Node節點都會啟動kubelet進程,用來處理Master節點下發到本節點的任務,管理Pod和其中的容器。
[Kubernetes核心原理(四)之Kubelet](http://blog.csdn.net/huwh_/article/details/77922293)
- 創建kubelet的數據目錄
```
sudo mkdir /var/lib/kubelet
```
- 創建kubelete配置文件
```
sudo vim /etc/kubernetes/kubelet
```
```
KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=node_out_ip"
KUBELET_API_SERVER="--api-servers=http://kub_master_ip:8080"
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.RedHat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS="--enable-server=true --enable-debugging-handlers=true"
```
- 創建systemd文件
```
sudo vim /lib/systemd/system/kubelet.service
```
```
[Unit]
Description=Kubernetes Kubelet
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=docker.service
Requires=docker.service
[Service]
WorkingDirectory=/var/lib/kubelet
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/kubelet
ExecStart=/usr/bin/kubelet \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBELET_API_SERVER \
$KUBELET_ADDRESS \
$KUBELET_PORT \
$KUBELET_HOSTNAME \
$KUBE_ALLOW_PRIV \
$KUBELET_POD_INFRA_CONTAINER \
$KUBELET_ARGS
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
```
- 啟動kubelet服務
```
sudo systemctl daemon-reload
sudo systemctl enable kubelet
sudo systemctl start kubelet
```
#### 8. 配置kube-proxy服務
- 創建kube-proxy配置文件
```
sudo vim /etc/kubernetes/proxy
```
```
# kubernetes proxy config
# default config should be adequate
# Add your own!
KUBE_PROXY_ARGS=""
```
- 創建systemd文件
```
sudo vim /lib/systemd/system/kube-proxy.service
```
```
[Unit]
Description=Kubernetes Proxy
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
EnvironmentFile=-/etc/kubernetes/config
EnvironmentFile=-/etc/kubernetes/proxy
ExecStart=/usr/bin/kube-proxy \
$KUBE_LOGTOSTDERR \
$KUBE_LOG_LEVEL \
$KUBE_MASTER \
$KUBE_PROXY_ARGS
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
```
- 啟動kube-proxy服務
```
sudo systemctl daemon-reload
sudo systemctl enable kube-proxy
sudo systemctl start kube-proxy
```
- 查詢node狀態
執行kubectl get node命令來查看node狀態。都為Ready狀態時,則說明node節點已經成功連接到master,如果不是該狀態,則需要到該節點上,定位下原因。可通過journalctl -u kubelet.service命令來查看kubelet服務的日志。
```
kubectl get node
```
#### 9. Kubernetes測試
測試Kubernetes是否成功安裝。
- 編寫yaml文件
在Kubernetes master上創建一個nginx.yaml,用于創建一個nginx的ReplicationController。
```
vim rc_nginx.yaml
```
```
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
labels:
name: nginx
spec:
replicas: 2
selector:
name: nginx
template:
metadata:
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
```
### 參考
[Ubuntu上手動安裝部署Kubernetes詳細指南](http://www.linuxidc.com/Linux/2017-04/142514.htm)
[docker kubernetes dashboard安裝部署詳細介紹](http://www.jb51.net/article/94343.htm)
- 在看的書和文章
- Java程序員手冊
- 思維方式
- 面向服務
- Dubbo
- StringBoot
- 001.應用部署
- 002.注解學習
- SpringCloud
- SpringCloud入門
- Dbs
- 分布式
- Ffp
- 多線程
- 多線程小知識
- Java鎖認識
- Netty
- Netty學習目錄
- 讀寫事件流程分析與相關API
- 數據
- 大數據學習
- 學習目錄
- Hadoop學習
- Hadoop組建安裝
- ssh配置免密登陸
- Hadoop偽集群模式
- HBase偽集群模式
- Hive安裝
- 常用操作命令
- 問題記錄
- DOLIST
- 學習資料
- Spark
- 一些概念介紹
- 數據庫
- Oracle相關
- 批量測試數據生成
- MySQL相關
- Redis
- 常用操作
- 機器學習
- 認識
- Kafka
- 監控
- 分布式相關
- RPC
- 中間件
- ElasticSearch
- ES環境搭建
- Python客戶端創建索引
- Es的api常用操作
- SQL查詢引擎
- Es數DB的數據同步
- ActiveMQ
- ActiveMQ介紹
- 分享
- Skyeye
- 組件安裝配置
- Dubbo服務Demo應用部署
- Kafka安裝配置
- RabbitMq配置
- Docker
- Docker學習文章
- Docker的大數據平臺之路
- Docker環境搭建
- ubuntu16安裝docker
- Docker鏡像加速
- 使用Docker快速搭建中間件
- Docker環境使用mysql
- Docker環境的中間件搭建匯總
- Docker鏡像容器管理
- Docker鏡像創建
- Docker創建可用的系統容器
- Kubernetes
- etcd安裝
- flanneld安裝
- kubernetes環境安裝
- kubernetes源碼編譯
- Linux相關
- Linux操作系統
- Deepin操作系統
- 新系統環境準備
- Linux系統小工具
- Linxu配置時間服務器同步
- DNS服務器dnsmasq
- Linux命令
- 常用命令
- 計算機基礎
- README
- 數據結構
- 面試題總結
- 計算機組層原理
- 計算機組層原理
- 其它語言
- Python
- Python環境搭建
- Python學習總結
- Python語法學習
- Python模塊學習
- MySQLdb
- scrapy
- Python的exception
- PythonNLP入門
- Go
- 工具組件
- Jenkins
- Jenkins認識
- Jenkins安裝配置
- Jenkins插件使用
- Jenkins項目常用配置
- Git
- Git使用說明
- NLP
- 入門級別
- 一些概念
- faiss介紹
- WMD介紹