一、CentOS 7 基础环境准备

centos  默认服务目录
/usr/lib/systemd/system systemctl服务开机启动链接存贮目录:
/etc/systemd/system/basic.target.wants/ 列出所有开机自启的服务
systemctl list-unit-files|grep enabled

  1、Centos7 防火墙 默认是 firewall

想和centos  一样配置 iptables;可以直接
# yum update iptables 也可以直接安装
# yum install iptables iptables-devel iptables-services iptables-utils

关闭 firewalld 开启iptables
Systemctl stop firewalld
Systemctl disable firewalld
systemctl restart iptables.service
systemctl status iptables.service
systemctl enable iptables.service

  2、网络设置network

使用 static 地址和配置DNS
Centos 的网卡名称从默认eth更改为ifcfg-en开头的;
CentOS6 及之前以太网网卡进行顺序命名的;多网卡如:eth0,eth1 依次;
Centos7 则不同,命名规则默认是基于固件、拓扑、位置信息来分配;

  查看网卡信息:

查看 ip 地址
# ip addr show 如果用户不习惯可以更新 ifconfig 然后再查看;
# yum update ifconfig 没有的话 可以在直接安装 net-tools
# yum install net-tools

  3、关闭selinux

# sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux 

  4、更新 yum 源

# cat /etc/yum.repos.d/virt7-docker-common-release.repo

[virt7-docker-common-release]
name=virt7-docker-common-release
baseurl=http://cbs.centos.org/repos/virt7-docker-common-release/x86_64/os/
gpgcheck=

  5、时间校验 时间服务(这个有多种方式)

# yum install ntp

systemctl restart ntpd.service
也可以部署时间服务器进行校验

  6、规划分布

10.100.10.100 master
10.100.10.105 minion1 (node1)
10.100.10.106 minion2 (node2)
也可以去绑定主机头 /etc/hosts

二 、kubernetes

  Kubernetes 用于管理云平台中多个主机上的容器化的应用,就是一个容器集群的管理工具。

  在k8s中 所有的容器都是定义在 一个POD 中运行,cloudstack 也有这个概念。一个Pod承载着多个容器,同一个Pod中的容器会部署在同一个物理机器上并且能够共享资源。个Pod也可以包含O个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被所有Pod中的容器共享,对于用户创建的每个Pod,系统会自动选择那个健康并且有足够容量的机器,然后创建类似容器的容器,当容器创建失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet,但是,如果是Pod失败或者机器,它不会自动的转移并且启动,除非用户定义了 replication controller。

  API对象是K8s集群中的管理操作单元,所以有很多的容错性和可扩展性。

  Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

三、master 服务端:

  IP : 10.100.10.100

安装主程序:
# yum install etcd flannel docker kubernetes

  1、Etcd

  etcd 是 CoreOS 团队发起的一个管理配置信息和服务发现(service discovery)的项目;类似zookeeper ,Apache ZooKeeper也是做分布式系统中进行同步和一致性管理的。因为在分布式系统中,各种服务的配置信息的管理分享,服务的发现是一个很基本同时也是很重要的问题。

  使用 etcd 可以在多个节点上启动多个实例,并添加它们为一个集群。同一个集群中的 etcd 实例将会保持彼此信息的一致性。

etcd.conf 文件配置示例 :

# cat etcd.conf

ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"

  启动 :

systemctl start etcd.services

  2、虚拟网络(可以供docker虚拟网络)
  可以使用 flannel,或者openvswitch

在etcd里定义创建flannel网络配置:
# etcdctl mk /atomic.io/network/config '{"Network":"172.16.0.0/16"}'

  3、etcdctl 常用命令;

backup 备份目录
cluster-health 集群健康检测
mk 创建一个键值设置属性
mkdir 创建目录
rm 删除
rmdir 如果目录为空 删除所有
get 查看键的属性

  4、kubernetes -master 配置;

    4.1、config配置示例:

# cat /etc/kubernetes/config |grep -v ^$ |grep -v ^#
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://docker-master:8080"

    4.2、apiserver 配置示例:

# cat /etc/kubernetes/apiserver |grep -v ^$ |grep -v ^#

KUBE_API_ADDRESS="--address=0.0.0.0"
KUBE_API_PORT="--port=8080"
KUBE_MASTER="--master=http://docker-master:8080"
KUBELET_PORT="--kubelet-port=10250"
KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""

    4.3、kubelet配置示例:

# cat /etc/kubernetes/kubelet |grep -v ^$ |grep -v ^#

KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
KUBELET_ARGS=""

  5、添加启动项、启动、并查看状态:

# cat start-kube.sh 
for SERVICES in etcd docker kube-apiserver kube-controller-manager kube-scheduler; do
systemctl enable $SERVICES
systemctl restart $SERVICES
systemctl status $SERVICES
done

  7、服务检测:

1. 检测端口;ss -tln

2. 查看 docker 网络

# ifconfig docker 
查看 docker 网络 172.16.0.0/ 网络

3. master 检测节点(暂时没有):

# kubectl get nodes
NAME STATUS AGE

4. 异常排错:可以根据提示进行查看启动运行异常的信息

# journalctl -xe 查看错误信息
dhcp 问题
DNS问题
镜像下载问题
ca 认证问题

四、kubernettes - minion 节点

1. 环境安装

节点 主程序
yum -y install flannel docker kubernetes

2. 配置 flannel

# cat /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://10.100.10.100:2379" # etcd 节点名称

FLANNEL_ETCD_PREFIX="/atomic.io/network" # flannel网络 可以设置成master主机IP

1、kubernetes minion 端配置示例参考;

主要也是这个文件 config kubetle apiserver (minion 配置基本一样的,kubelet 中 KUBELET_HOSTNAME 设置为本机IP 地址)

    1.1、apiserver 文件

# cat apiserver |grep -v ^$ |grep -v ^#

KUBE_API_ADDRESS="--address=127.0.0.1"
KUBE_ETCD_SERVERS="--etcd_servers=http://10.100.10.100:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

    1.2、config 文件

# cat config |grep -v ^$ |grep -v ^#

KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow_privileged=false"
KUBE_MASTER="--master=http://10.100.10.100:8080"
KUBE_ETCD_SERVERS="--etcd-servers=http://10.100.10.100:2379"

    1.3、kubelet 文件

# cat kubelet |grep -v ^$ |grep -v ^#

KUBELET_ADDRESS="--address=0.0.0.0"
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=10.100.10.105"
# KUBELET_HOSTNAME 设置minion端主机IP (node2 就是设置为 10.100.10.106)
KUBELET_API_SERVER="--api-servers=http://10.100.10.100:8080"
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

  2、minion 端添加启动项、启动、并查看状态;

# cat minion-kube.sh
for SERVICES in kube-proxy kubelet docker flanneld; do
systemctl enable $SERVICES
systemctl restart $SERVICES
systemctl status $SERVICES
done

  3、检测服务

ss -tln 
# 检测进程端口;
# ifconfig docker
查看docker网络 172.16.0.0/ 网络;
再返回 master 端检测节点:
# kubectl get nodes

NAME STATUS AGE

五、Kubernetes Web UI 
  1、创建kubernetes-dashboard.yaml

从官网下载 yaml 文件;
wget https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml

2、编辑 kubernetes-dashboard.yaml 文件;

配置示例(版本不是最新,可按照部署最新进行编辑修改):

# cat kubernetes-dashboard.yaml
# Copyright Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License. # Configuration to deploy release version of the Dashboard UI.
#
# Example usage: kubectl create -f <this_file> kind: Deployment
apiVersion: extensions/v1beta1
metadata:
labels:
app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
replicas:
selector:
matchLabels:
app: kubernetes-dashboard
template:
metadata:
labels:
app: kubernetes-dashboard
# Comment the following annotation if Dashboard must not be deployed on master
annotations:
scheduler.alpha.kubernetes.io/tolerations: |
[
{
"key": "dedicated",
"operator": "Equal",
"value": "master",
"effect": "NoSchedule"
}
]
spec:
containers:
- name: kubernetes-dashboard
image: docker.io/mritd/kubernetes-dashboard-amd64
     # 如果有网络问题,images 也可以自己创建 docker 私有库;地址写成自己的;
#imagePullPolicy: Always
imagePullPolicy: IfNotPresent
     # 不存在 就下载
ports:
- containerPort:
protocol: TCP
args:
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
# to it. Uncomment only if the default does not work.
# - --apiserver-host=http://my-address:port
- --apiserver-host=http://10.100.10.100:8080
      # master 主机 apiserver
livenessProbe:
httpGet:
path: /
port:
initialDelaySeconds:
timeoutSeconds:
---
kind: Service
apiVersion: v1
metadata:
labels:
app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port:
targetPort:
selector:
app: kubernetes-dashboard

3、创建 Pod (image 位置;设置下载地址有关 需要等一会)

# kubectl create -f kubernetes-dashboard.yaml

# 创建 pod 失败删除
# 可以使用 kubectl delete
-f kubernetes-dashboard.yaml 删除

  4、检测 pods

  pods 检测

# kubectl get pods --all-namespaces

NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system kubernetes-dashboard--4nbkp / Running 5m

  services 检测

# kubectl get services --all-namespaces
NAMESPACE NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes 10.254.0.1 <none> /TCP 33m
kube-system kubernetes-dashboard 10.254.211.205 <nodes> :/TCP 5m

  5、查看 service 信息

# kubectl describe service/kubernetes-dashboard --namespace="kube-system"

Name:    kubernetes-dashboard
Namespace: kube-system
Labels: app=kubernetes-dashboard
Selector: app=kubernetes-dashboard
Type: NodePort
IP: 10.254.211.205
Port: <unset> /TCP
NodePort: <unset> /TCP
Endpoints: 172.16.4.4:
Session Affinity: None

  6、异常处理

1、查看 pods 信息描述;
# kubectl describe pod/kubernetes-dashboard--4nbkp --namespace="kubectl-system" 2、查看日志信息;
# kubectl logs -f kubernetes-dashboard--4nbkp --namespace=kube-system

  7、测试访问:

K8s 集群提供虚拟的隔离作用,K8s集群初始有两个名字空间,分别是默认名字空间 default 和系统名字空间 kube-system

http://master:8080/ui/

六、kubectl 常用命令:也就是 kubectl 进行交互操作执行。

  1. 检测信息命令

# 查看集群信息
kubectl cluster-info
# 查看各组件信息
kubectl -s http://localhost:8080 get componentstatuses
# 查看pods所在的运行节点
kubectl get pods -o wide
# 查看pods定义的详细信息
kubectl get pods -o yaml
# 查看Replication Controller信息
kubectl get rc
# 查看service的信息
kubectl get service
# 查看节点信息
kubectl get nodes
# 按selector名来查找pod
kubectl get pod --selector name=redis
# 查看运行的pod的环境变量
kubectl exec pod名 env

 2、操作类命令

# 创建
kubectl create -f 文件名
# 重建
kubectl replace -f 文件名 [--force]
# 删除
kubectl delete -f 文件名
kubectl delete pod pod名
kubectl delete rc rc名
kubectl delete service service名
kubectl delete pod --all

 

  

  

kubernetes 集群的更多相关文章

  1. 基于Python+Django的Kubernetes集群管理平台

    ➠更多技术干货请戳:听云博客 时至今日,接触kubernetes也有一段时间了,而我们的大部分业务也已经稳定地运行在不同规模的kubernetes集群上,不得不说,无论是从应用部署.迭代,还是从资源调 ...

  2. Kubernetes集群搭建过程中遇到的问题

    1. 创建Nginx Pod过程中报如下错误: #kubectlcreate -f nginx-pod.yaml Error from server: error when creating &quo ...

  3. Kubernetes集群初探

    上文我们在一台虚机上演示了Kubernetes基于redis和docker的guestbook留言簿案例,本文我们将通过配置Kubernetes集群的方式继续深入研究.集群组件安装如下配置. IP N ...

  4. kubernetes集群部署

    鉴于Docker如此火爆,Google推出kubernetes管理docker集群,不少人估计会进行尝试.kubernetes得到了很多大公司的支持,kubernetes集群部署工具也集成了gce,c ...

  5. 在Openstack上创建并访问Kubernetes集群

    第一部分:创建集群 在Openstack部署Kubernetes集群运行Nginx容器的步骤,其中包括: 利用Murano部署Kubernetes集群 配置Openstack的安全性使Kubernet ...

  6. Centos7上安装Kubernetes集群部署docker

    一.安装前准备1.操作系统详情需要三台主机,都最小化安装 centos7.3,并update到最新 [root@master ~]# (Core) 角色 主机名 IPMaster master 192 ...

  7. 和我一步步部署 kubernetes 集群

    和我一步步部署 kubernetes 集群 本系列文档介绍使用二进制部署最新 kubernetes v1.6.1 集群的所有步骤,而不是使用 kubeadm 等自动化方式来部署集群: 在部署的过程中, ...

  8. 在Kubernetes集群中使用calico做网络驱动的配置方法

    参考calico官网:http://docs.projectcalico.org/v2.0/getting-started/kubernetes/installation/hosted/kubeadm ...

  9. 使用acs-engine在Azure中国区部署kubernetes集群详解

    转载请注明出处:http://www.cnblogs.com/wayneiscoming/p/7649642.html 1. acs-engine简介 ACS是微软在2015年12月推出的一项基于容器 ...

  10. Traefik实现Kubernetes集群服务外部https访问

    转载请注明出处:http://www.cnblogs.com/wayneiscoming/p/7707942.html traefik 是一个前端http反向代理服务器以及负载均衡器,支持多种微服务后 ...

随机推荐

  1. python之json数据存储

    # 数据存储:json.dump()和json.load() # date:2017-07-17 import json file_name = 'D:/json_file.txt' nums = [ ...

  2. BZOJ4259 残缺的字符串(FFT)

    两个串匹配时相匹配的位置位置差是相同的,那么翻转一个串就变成位置和相同,卷积的形式. 考虑如何使用卷积体现两个位置能否匹配.一个暴力的思路是每次只考虑一种字符,将其在一个串中设为1,并在另一个串中将不 ...

  3. [ctsc2018] 混合果汁 【可持久化线段树】【二分答案】

    题目分析 首先考虑到最小值最大,二分答案.假设答案为k,显然这满足单调性.如果某个k使得这个情况下选不出.那么比k大的一定也选不出,所以二分答案. 接着我们可以贪心,当我们确认了k以后,一定会优先选费 ...

  4. bzoj2142: 礼物

    2142: 礼物 Description 一年一度的圣诞节快要来到了.每年的圣诞节小E都会收到许多礼物,当然他也会送出许多礼物.不同的人物在小E心目中的重要性不同,在小E心中分量越重的人,收到的礼物会 ...

  5. $Min\_25$筛学习笔记

    \(Min\_25\)筛学习笔记 这种神仙东西不写点东西一下就忘了QAQ 资料和代码出处 资料2 资料3 打死我也不承认参考了yyb的 \(Min\_25\)筛可以干嘛?下文中未特殊说明\(P\)均指 ...

  6. Leetcode 217.存在重复元素 By Python

    给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [1,2,3,1] 输出: true ...

  7. poj1236/luogu2746 Network of Schools (tarjan)

    tarjan缩点后,第一问答案显然是入度为零的点得个数第二问:考虑到 没有入度或出度为0的点 的图强连通, 所以答案就是max{入度为零的个数,出度为零的个数} (把出度为零的连到入度为零的点,然后剩 ...

  8. codeforces 793B - Igor and his way to work(dfs、bfs)

    题目链接:http://codeforces.com/problemset/problem/793/B 题目大意:告诉你起点和终点,要求你在只能转弯两次的情况下能不能到达终点.能就输出“YES”,不能 ...

  9. 洛谷P3195 玩具装箱TOY

    题目大意: 有n个数,要将他们分成若干段,每一段的cost定义为: cost=r-l+ΣCk (k∈[r,l]) 该段的最终花费是:(cost-L)^2; 给出L,n,C(1~n),总共的最小花费. ...

  10. MQTT——取消订阅报文和断开连接报文

    笔者已经把连接报文,订阅报文,发布报文都讲解了完了.而接下来就是取消订阅报文和断开连接报文.和其他的报文比较的话,他们显示非常简单.甚至笔者觉得可以不必要拿出来讲.只要看一下MQTT文档就没有什么不清 ...