systemctl restart firewalld
systemctl stop firewalld
这里我用的是一台服务器
121.36.104.222 ab
121.36.104.222 master
121.36.104.222 etcd
121.36.104.222 node-1
121.36.104.222 registry
kubernetes 工作模式 c/s(客户端/服务器) b/s(浏览器/服务端)
修改主机名
hostnamectl --static set-hostname master
hostnamectl --static set-hostname node-1
安装epel-release
yum -y install epel-release
修改 /etc/etcd/etcd.conf 配置文件
注:只修改下面未注释的三行
注:只修改下面未注释的三行
#[Member]
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" #6行,监控的哪块网卡,端口
ETCD_NAME="master" #9行 etcd数据库起的名字
#[Clustering]
#用此路径访问etcd数据库
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.1:2379" #21行 路径访问到我
systemctl enable etcd && systemctl start etcd
etcdctl -C http://127.0.0.1:2379 cluster-health
显示如下
[root@ab ~]# etcdctl -C http://127.0.0.1:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://127.0.0.1:2379
cluster is healthy
5)安装docker
yum install docker -y
修改docker配置文件
vim /etc/sysconfig/docker
//在if语句下面添加一行
OPTIONS='--insecure-registry registry:5000'
docker访问默认使用443端口,不配置不能用。registry做过主机名解析
启动docker
systemctl enable docker && systemctl start docker
部署安装kubernetes
yum install kubernetes -y
注意:
在kubernetes master上需要运行以下组件,故分别配置组件启动相应服务:
kubernetes API Server
kubernetes Controller Manager
kubernetes Scheduler
修改apiserver配置文件
vi /etc/kubernetes/apiserver
# The address on the local server to listen to. ——监听地址
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# The port on the local server to listen on.——监听端口
KUBE_API_PORT="--port=8080"
# Comma separated list of nodes in the etcd cluster ——逗号分割的存在etcd数据库中的节点列表
KUBE_ETCD_SERVERS="--etcd-servers=http://0.0.0.0:2379"
# default admission control policies——k8s支持的所有控制器,删掉ServiceAccount和SecurityContextDeny
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
修改config配置文件
vim /etc/kubernetes/config
# How the controller-manager, scheduler, and proxy find the apiserver
KUBE_MASTER="--master=http://127.0.0.1:8080" 控制器调度器联系apiserver组件的地址
启动apiserver、控制器、调度器
systemctl start kube-apiserver.service && systemctl enable kube-apiserver.service
systemctl start kube-controller-manager.service && systemctl enable kube-controller-manager.service
systemctl start kube-scheduler.service && systemctl enable kube-scheduler.service
部署node节点,因为我们master和node是同一台主机,所以下面关于node的重复步骤可以不做的,若多台主机的话,node节点按照以下配置。
node安装docker
yum install docker -y
修改docker配置文件
vim /etc/sysconfig/docker
//在if语句后面添加一行
OPTIONS='--insecure-registry registry:5000'
启动node节点的docker
# systemctl enable docker && systemctl start docker
node节点需要两个组件:
Kubelet
kubernetes Proxy
修改node节点配置文件,单台主机的话,这个是不需要修改的,上边已经改过了
vim /etc/kubernetes/config
# How the controller-manager, scheduler, and proxy find the apiserver
# —— 连接apiserver的地址
KUBE_MASTER="--master=http://127.0.0.1:8080"
修改kubelet配置文件
vim /etc/kubernetes/kubelet
# kubernetes kubelet (minion) config
# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)
KUBELET_ADDRESS="--address=0.0.0.0" kubelet监听地址
# You may leave this blank to use the actual hostname
KUBELET_HOSTNAME="--hostname-override=121.36.104.222" #使用自己的主机名称,#11 行 node节点主机名或者IP
# location of the api-server
KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080" #api-server 的地址
启动
systemctl start kubelet.service && systemctl enable kubelet.service
systemctl start kube-proxy.service && systemctl enable kube-proxy.service
查看节点状态
在master上查看集群及节点状态
[root@ab ~]# kubectl -s http://121.36.104.222:8080 get node
NAME STATUS AGE
127.0.0.1 Ready 1m
[root@ab ~]# kubectl get nodes
NAME STATUS AGE
127.0.0.1 Ready 1m
创建覆盖网络 --Flannel #就不用手动配置路由
在master,node上均执行如下命令,进行安装
集群中所有主机均需要安装配置flannel,我们只有一台主机,配置一台就行了
yum -y install flannel
配置flannel
vi /etc/sysconfig/flanneld
# etcd url location. Point this to the server where etcd runs
#——配置连接etcd数据库
FLANNEL_ETCD_ENDPOINTS="http://127.0.0.1:2379"
配置etcd中关于flannel的key
创建子网,子网需要以键值对的形式存到数据库中。
在配置文件中指定目录,默认会在这个目录中创建一个config的配置文件用来存放网络的配置
此步骤默认已经做好,无需再配置
# vi /etc/sysconfig/flanneld
# For address range assignment
FLANNEL_ETCD_PREFIX="/atomic.io/network"
这个是在etcd服务器上操作,管理员以后的操作
配置 flannel 使用的 network,并将配置保存在 etcd 中(IP地址不用改):
etcdctl mk /atomic.io/network/config '{ "Network": "172.17.0.0/16" }'
{ "Network": "172.17.0.0/16" }
每个节点都启动flannel
systemctl restart flanneld
PS:从etcd中获取network 配置,并为本节点产生一个subnet保存在etcd中,并且产生 /run/flannel/subnet.env 文件配置文件内容入下(这个文件不用改):
[root@ab ~]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.17.0.0/16
FLANNEL_SUBNET=172.17.47.1/24
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
启动
启动Flannel之后,需要一次重启docker,kubernets
在master执行
systemctl start flanneld.service && systemctl enable flanneld.service
在 master启动
重启所有服务
systemctl restart flanneld.service && systemctl restart docker && systemctl restart kube-apiserver.service && systemctl restart kube-controller-manager.service && systemctl restart kube-scheduler.service
如果有一天网络不能用了需要 更新
网络刷新一下(排错的时候使用,部署的时候不用)
etcdctl update /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
然后在每个minion 节点上,flannel 启动,他从etcd中获取 network 配置,并为本节点产生一个subnet,也保存在etcd中。并且产生 /run/flannel/subnet.env 文件:
cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.17.0.0/16 #这是全局的 flannel network
FLANNEL_SUBNET=172.17.38.1/24 #这是本节点上 flannel subnet
FLANNEL_MTU=1472
FLANNEL_IPMASQ=false
在node 节点上
重启所有服务
systemctl restart flanneld.service && systemctl restart docker && systemctl restart kubelet.service && systemctl restart kube-proxy.service
部署dashboard,首先需要两个镜像,不也可以下载,就是比较慢。
docker pull daocloud.io/daocloud/google_containers_kubernetes-dashboard-amd64:v1.6.1 #国内即可下载
装载另一个镜像
docker pull docker.io/tianyebj/pod-infrastructure
docker save -o podinfrastructure.tar docker.io/tianyebj/pod-infrastructure
docker load < podinfrastructure.tar
查看导入后的镜像
docker images
所有node节点修改配置文件,单台主机的话,既是master也是node也要修改。
vi /etc/kubernetes/kubelet
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/tianyebj/pod-infrastructure:latest"
//此处要与你的镜像名称保持一致!
重启服务
systemctl restart kubelet
master节点任意目录创建yaml文件
vi dashboard.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: daocloud.io/daocloud/google_containers_kubernetes-dashboard-amd64:v1.6.1
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://121.36.104.222:8080
livenessProbe:
httpGet:
path: /
port: 9090
initialDelaySeconds: 30
timeoutSeconds: 30
第一个箭头指向的地方需要和你的镜像名称保持一致,一定要一致,不知道名称,使用docker images命令进行查看。
第二个箭头指向的地方修改为自己虚拟机的IP地址,虚拟机自己网卡的ipv4地址
接着创建第二个yaml文件,照抄下面就行,不用修改
vi dashboardsvc.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
master执行如下命令。
# kubectl create -f dashboard.yaml
# kubectl create -f dashboardsvc.yaml
不想用了,删除上面两个
kubectl delete deployment kubernetes-dashboard-latest --namespace=kube-system
kubectl delete svc kubernetes-dashboard-latest --namespace=kube-system
[root@ab ~]# kubectl get pod -o wide --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE
kube-system kubernetes-dashboard-latest-2292089379-rmn0m 1/1 Running 0 23s 172.17.0.2 127.0.0.1
这个状态status一定要是running才算成功,
使用浏览器验证:
浏览器输入:http://121.36.104.222:8080/ui
创建一个nginx 的Pod的 yaml文件
示例
vi dc-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
name: dc-nginx
labels:
web: nginx
nginx: nginx1
spec:
containers:
- name: dc-nginx-web
image: daocloud.io/library/nginx
ports:
- containerPort: 80
创建
kubectl create -f dc-nginx.yaml
pod "dc-nginx" created
查看pod容器 #显示READY 是 0/1 是不正常的
[root@ab ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
dc-nginx 0/1 ContainerCreating 0 11s
在重新获取一次
[root@ab ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
dc-nginx 1/1 Running 0 30s
进入Pod 对应的容器内部
kubectl exec -it dc-nginx /bin/bash
删除Pod:
kubectl delete pod pod名 #单个删除
kubectl delete pod --all #批量删除
例如
kubectl delete pod dc-nginx
pod "dc-nginx" deleted
重新启动基于yaml文件的应用
kubectl delete -f xxx.yaml
kubectl create -f xxx.yaml
页面创建应用
http://www.mamicode.com/info-detail-2921170.html 2,典型使用场景 ,从这里开始看
使用命令kubectl run创建应用
https://www.cnblogs.com/linuxk/p/9525150.html