一:簡介
1.什么是k8s?
k8s是一個docker容器管理工具
它是一個全新的基於容器技術的分布式架構領先方案,是開源的容器集群管理系統。
在docker的基礎上,為容器化的應用提供部署運行,資源調度,服務發現和動態伸縮等一系列完整功能
2.----k8s的優勢:
a,容器編排
b,輕量級
c,開源
d,彈性伸縮
e,負載均衡
二:k8s的核心功能
1.自愈: 重新啟動失敗的容器,在節點不可用時,替換和重新調度節點上的容器,對用戶定義的健康檢查不響應的容器會被中止,並且在容器准備好服務之前不會把其向客戶端廣播。
彈性伸縮: 通過監控容器的cpu的負載值,如果這個平均高於80%,增加容器的數量,如果這個平均低於10%,減少容器的數量
服務的自動發現和負載均衡: 不需要修改您的應用程序來使用不熟悉的服務發現機制,Kubernetes 為容器提供了自己的 IP 地址和一組容器的單個 DNS 名稱,並可以在它們之間進行負載均衡。
滾動升級和一鍵回滾: Kubernetes 逐漸部署對應用程序或其配置的更改,同時監視應用程序運行狀況,以確保它不會同時終止所有實例。 如果出現問題,Kubernetes會為您恢復更改,利用日益增長的部署解決方案的生態系統。
192.168.175.250 node1
192.168.175.251 node2
配置master為etcd和master節點:
ETCD_NAME="etcd"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.175.3:2379"

(2)啟動服務
命令:[root@master ~]# systemctl start etcd
注意:etcd 通訊使用 2379 端口
(3)查看狀態:
命令:[root@master ~]# ss -antulp | grep 2379
(4)檢查 etcd 集群成員列表,這里只有一台
命令:[root@master ~]# etcdctl member list
3.配置master服務器
(1)配置master配置文件
命令:[root@master ~]# vim /etc/kubernetes/config #修改以下配置文件
KUBE_MASTER="--master=http://192.168.175.3:8080"
(2)配置apiserver配置文件
命令:[root@master ~]# vim /etc/kubernetes/apiserver
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.175.3:2379"
KUBE_ADMISSION_CONTROL="--admission-control=AlwaysAdmit"
(3)配置 kube-scheduler 配置文件
命令:[root@master ~]# vim /etc/kubernetes/scheduler
KUBE_SCHEDULER_ARGS="0.0.0.0"
4.(1) 配置 etcd,指定容器雲中 docker 的 IP 網段
命令:[root@master ~]# etcdctl mkdir /k8s/network
命令:[root@master ~]# etcdctl set /k8s/network/config '{"Network": "10.255.0.0/16"}'
命令:[root@master ~]# etcdctl get /k8s/network/config
(2)設置flanneld服務
命令:[root@master ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.175.3:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33" #設置自己的通信物理網卡
命令:[root@master ~]# systemctl restart flanneld #重啟服務
(3)檢查所有配置
命令:[root@master ~]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.255.0.0/16
FLANNEL_SUBNET=10.255.94.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
命令:[root@master ~]# cat /run/flannel/docker
DOCKER_OPT_BIP="--bip=10.255.94.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"
DOCKER_NETWORK_OPTIONS=" --bip=10.255.94.1/24 --ip-masq=true --mtu=1472"
5. 啟動master上4個服務
命令:[root@master ~]# systemctl restart kube-apiserver kube-controller-manager kube-scheduler flanneld
命令:[root@master ~]# systemctl status kube-apiserver kube-controller-manager kube-scheduler flanneld
命令:[root@master ~]# systemctl enable kube-apiserver kube-controller-manager kube-scheduler flanneld
6. 配置minion節點服務器
注意:minion各節點配置相同,這邊已node1為例
(1)配置flanneld服務
命令:[root@node1 ~]# vim /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://192.168.175.3:2379"
FLANNEL_ETCD_PREFIX="/k8s/network"
FLANNEL_OPTIONS="--iface=ens33"
(2)命令:[root@node1 ~]# vim /etc/kubernetes/config
KUBE_MASTER="--master=http://192.168.175.3:8080"
(3)命令:[root@node1 ~]# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_HOSTNAME="--hostname-override=node1"
KUBELET_API_SERVER="--api-servers=http://192.168.175.3:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
(4)啟動node1服務
命令:[root@node1 ~]# systemctl restart flanneld kube-proxy kubelet docker
命令:[root@node1 ~]# systemctl enable flanneld kube-proxy kubelet docker
命令:[root@node1 ~]# systemctl status flanneld kube-proxy kubelet docker
7.查看服務是否安裝成功(在master上查看)
命令:[root@master ~]# kubectl get nodes
NAME STATUS AGE
node1 Ready 2h
node2 Ready 25s
五:Kubernetes的web管理界面搭建
1. 創建dashboard-deployment.yaml配置文件
命令:[root@master ~]# vim /etc/kubernetes/dashboard-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
# Keep the name in sync with image version and
# gce/coreos/kube-manifests/addons/dashboard counterparts
name: kubernetes-dashboard-latest
namespace: kube-system
spec:
replicas: 1
template:
metadata:
labels:
k8s-app: kubernetes-dashboard
version: latest
kubernetes.io/cluster-service: "true"
spec:
containers:
- name: kubernetes-dashboard
image: docker.io/bestwu/kubernetes-dashboard-amd64:v1.6.3
imagePullPolicy: IfNotPresent
resources:
# keep request = limit to keep this container in guaranteed class
limits:
cpu: 100m
memory: 50Mi
requests:
cpu: 100m
memory: 50Mi
ports:
- containerPort: 9090
args:
- --apiserver-host=http://172.26.0.10:8080
livenessProbe:
httpGet:
path: /
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
2.創建編輯 dashboard-service.yaml 文件:
命令:[root@master ~]# vim /etc/kubernetes/dashboard-service.yaml
apiVersion: v1
kind: Service
metadata:
name: kubernetes-dashboard
namespace: kube-system
labels:
k8s-app: kubernetes-dashboard
kubernetes.io/cluster-service: "true"
spec:
selector:
k8s-app: kubernetes-dashboard
ports:
- port: 80
targetPort: 9090
3.node1和node2需要提前拉取兩個鏡像
命令:[root@node1 ~]# docker search kubernetes-dashboard-amd
命令:[root@node1 ~]# docker pull docker.io/siriuszg/kubernetes-dashboard-amd64
命令:[root@node1 ~]# docker search pod-infrastructure
命令:[root@node1 ~]# docker pull docker.io/xiaotech/pod-infrastructure
命令:[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/siriuszg/kubernetes-dashboard-amd64 latest a8e05b8cb40d 3 months ago 122 MB
docker.io/xiaotech/pod-infrastructure latest 04ccf7b18fb5 16 months ago 209 MB
命令:[root@node2 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/siriuszg/kubernetes-dashboard-amd64 latest a8e05b8cb40d 3 months ago 122 MB
docker.io/xiaotech/pod-infrastructure latest 04ccf7b18fb5 16 months ago 209 MB
4. 啟勱 dashboard 的 deployment 和 service
命令:[root@master ~]# kubectl create -f /etc/kubernetes/dashboard-deployment.yaml
deployment "kubernetes-dashboard-latest" created
命令:[root@master ~]# kubectl create -f /etc/kubernetes/dashboard-service.yaml
5.查看運行結果
命令:[root@master ~]# kubectl get deployment --all-namespaces
命令:[root@master ~]# kubectl get svc --all-namespaces