Kubernetes--学习笔记-2-安装配置和服务部署

最近在学习Kubernetes,在学习过程中也踩了很多的坑,网上找了很多的资料和博客按步骤搭建总会有踩很多的坑,所有自已也将学习过程记录下了,供指点学习

kubernetes(k8s)是docker容器用来编排和管理的工具


我们通过kubectl向k8s Master发出指令。kubernetes Master主要是提供API Server、Scheduler、Controller组件,接收kubectl的命令,从Node节点获取Node的资源信息,并发出调度任务。Node节点提供kubelet、kube-proxy,每个node节点都安装docker,是实际的执行者。kubernetes不负责网络,所以一般是用flannel或者weave。etcd负责服务发现和node信息存储,下面开始:

一,系统环境和组件版本说明

1. 我现在用的虚拟机版本为 12.5.5 ,Workstation 12 Pro

 

2. centos,docker,kubernetes,etcd,flannel版本如下:

  1. [root@master cloud] # cat /etc/centos-release
  2. CentOS Linux release 7.4. 1708 (Core)
  3. [root@master cloud] # docker --version
  4. Docker version 1.12. 6, build ec8512b/ 1.12. 6
  5. [root@master cloud] # kubectl --version
  6. Kubernetes v1. 5.2
  7. [root@master cloud] # etcdctl --version
  8. etcdctl version: 3.2. 9
  9. API version: 2
  10. [root@node- 1 kubernetes] # flanneld -version
  11. 0. 7.1
二,虚拟机master,node 分配情况

服务器主机名称    IP           服务组件                                                                                                               
master10.11.3.56     docker,apiserver, controller-manager, scheduler                       
etcd10.11.3.56     etcd                                                                   
node-110.11.3.61     flannel, docker, kubelet, kube-proxy                      

这里将 etcd master放在一台虚机上

三,基本环境配置

1. 关闭防火墙

在master,node-1 虚机上分另都关闭防火墙,执行以下命令

  1. systemctl disable firewalld.service #<span style="font-family:'microsoft yahei';background-color:rgb(255,255,255);">使开机不启动防火墙(永久关闭)</span>
  2. systemctl stop firewalld.service # <span style="font-family:'microsoft yahei';background-color:rgb(255,255,255);">关闭防火墙</span>
2.添加hosts

在master和node-1中分别添加以下内容:

  1. [root@master cloud] # vim /etc/hosts
  2. 127.0. 0. 1   localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. :: 1         localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 10.11. 3.56  master
  5. 10.11. 3.56  etcd
  6. 10.11. 3.61  node- 1
四,安装服务组件

1.在master,node-1上分别安装docker,执行以下命令:

yum install -y docker 
安装完后,启动docker,并设置开机启动,执行以下命令:

  1. systemctl enable docker .service
  2. systemctl start docker .service
2.在etcd虚机上安装etcd组件
yum install -y etcd
安装完后,修改etcd的配置,配置文件路径:/etc/etcd/etcd.conf,执行以下命令:

vim /etc/etcd/etcd.conf
修改成以下:


参数说明:

  1. name 节点名称
  2. data-dir 指定节点的数据存储目录
  3. listen-peer-urls 监听URL,用于与其他节点通讯
  4. listen-client-urls 对外提供服务的地址:比如 http: //ip:2379,http://127.0.0.1:2379 ,客户端会连接到这里和 etcd 交互
  5. initial-advertise-peer-urls 该节点同伴监听地址,这个值会告诉集群中其他节点
  6. initial-cluster 集群中所有节点的信息,格式为 node1=http: //ip1:2380,node2=http://ip2:2380,… 。注意:这里的 node1 是节点的 --name 指定的名字;后面的 ip1:2380 是 --initial-advertise-peer-urls 指定的值
  7. initial-cluster-state 新建集群的时候,这个值为 new ;假如已经存在的集群,这个值为 existing
  8. initial-cluster-token 创建集群的 token,这个值每个集群保持唯一。这样的话,如果你要重新创建集群,即使配置和之前一样,也会再次生成新的集群和节点 uuid;否则会导致多个集群之间的冲突,造成未知的错误
  9. advertise-client-urls 对外公告的该节点客户端监听地址,这个值会告诉集群中其他节点

主要修改ETCD_LISTEN_CLIENT_URLS,ETCD_ADVERTISE_CLIENT_URLS这两项,设置开机启动和启动etcd:

  1. systemctl enable etcd .service
  2. systemctl start etcd .service

配置etcd内网信息

etcdctl -C 10.11.3.56:2379 set /atomic.io/network/config '{"Network":"172.17.0.0/16"}' 
PS:其中网络号172.17.0.0/16与docker中的docker0网络一致(若不一致,可修改docker0网络或者配置上述etcd网络);atomic.io与下面的Flannel配置中的FLANNEL_ETCD_PREFIX对应

五,master服务器上安装服务组件

1. 安装kubernetes-master

yum install -y kubernetes-master
2.安装完后,设置相关配置,切换目录 cd /etc/kubernetes下:

  1. [root@master cloud] # cd /etc/kubernetes/
  2. [root@master kubernetes] # ll
  3. total 16
  4. -rw-r--r--. 1 root root 868 Jan 16 10: 24 apiserver
  5. -rw-r--r--. 1 root root 652 Jan 16 10: 25 config
  6. -rw-r--r--. 1 root root 189 Jul 3 2017 controller-manager
  7. -rw-r--r--. 1 root root 111 Jul 3 2017 scheduler
  8. [root@master kubernetes] #
3.配置apiserver

vim apiserver
主要修改以下项内容:  
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0" 
KUBE_ETCD_SERVERS="--etcd-servers=http://etcd:2379" 
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota" 
PS:测试时需要把KUBE_ADMISSION_CONTROL中的SecurityContextDenyServiceAccount去掉,这是权限相关的


4.配置全局配置文件config


修改 KUBE_MASTER="--master=http://master:8080" 

5.设置kubernetes-master服务开机启动并启动相应服务

  1. systemctl enable kube-apiserver kube-scheduler kube-controller-manager
  2. systemctl start kube-apiserver kube-scheduler kube-controller-manager
6.测试kubernetes-master服务


也可以在访问http://10.11.3.56:8080地址

六 ,node-1服务器上安装服务组件

1. 安装配置flannel

yum install -y flannel 
安装完后修改相应配置,如下:


2.安装配置kubernetes-node

 2.1 安装 kubernetes-node 

 

yum install -y kubernetes-node
安装完后修相应配置

2.2 修改全局配置文件,如下:


修改 KUBE_MASTER="--master=http://master:8080"

2.3 配置kubelet组件


修改

  1. # You may leave this blank to use the actual hostname
  2. KUBELET_HOSTNAME= "--hostname-override=node-1"
  3. # location of the api-server
  4. KUBELET_API_SERVER= "--api-servers=http://master:8080"

关于:

  1. # pod infrastructure container
  2. #KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
  3. KUBELET_POD_INFRA_CONTAINER= "--pod-infra-container-image=docker.io/kubernetes/pause"

这一项修改主要是因为我所在的网络环境无法访问grc.io,所以 registry.access.redhat.com/rhel7/pod-infrastructure:latest这个镜像下载不了,里面是设置的一个基础镜像,我是在master服务器上手动下载一个docker.io/kubernetes/pause镜像,后文有说明

2.4 设置kubernetes-node服务组件开机启动,并启动组件

  1. systemctl enable kubelet kube-proxy
  2. systemctl start kubelet kube-proxy
2.5 测试集群是否正常工作

若正常工作,可获取工作节点信息及运行状态为Ready,



七,发布nginx服务

7.1 创建pod

创建nginx-pod.yaml文件,并下编辑输入以下内容:

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nginx-pod
  5. labels:
  6. name: nginx-pod
  7. spec:
  8. containers:
  9. - name: nginx
  10. image: nginx
  11. ports:
  12. - containerPort: 80
在创建文件的当前目录执行以下命令:

kubectl create -f nginx-pod.yaml
7.2查看pod状态

kubectl get pods
查看 pod状态会发现,
  1. NAME READY STATUS RESTARTS AGE
  2. nginx-pod 0/ 1 ContainerCreating 0 40s
这是因为 网络问题失败或在pull镜像正在下载中,我这里是先在master服务器上手动下载的,

  1. docker pull nginx
  2. docker pull <span style="color:rgb(79,79,79);font-size:14px;text-align:justify;">docker.io/kubernetes/pause </span>
然后先删除pod,再创建

kubectl delete pod nginx-pod.yaml
kubectl create -f nginx-pod.yaml


7.3 创建replicationController 

创建文件nginx-rc.yaml并编辑输入以下内容

  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: nginx-rc
  5. spec:
  6. replicas: 1
  7. selector:
  8. name: nginx-pod
  9. template:
  10. metadata:
  11. labels:
  12. name: nginx-pod
  13. spec:
  14. containers:
  15. - name: nginx-pod
  16. image: nginx
  17. ports:
  18. - containerPort: 80
执行以下命令:

kubectl create -f nginx-rc.yaml

查看replicationController 状态,如下图:


7.4 创建service

创建nginx-service.yaml 文件,并编辑输入以下内容:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: nginx-service
  5. spec:
  6. type: NodePort
  7. ports:
  8. - port: 80
  9. nodePort: 30001
  10. selector:
  11. name: nginx-pod
执行以下命令:

kubectl create -f nginx-service.yaml

查看service状态 ,如下图:



7.5 测试nginx服务 


也可以访问node-1 地址 http://10.11.3.61:30001



参考链接:

http://blog.csdn.net/u013760355/article/details/68061976

http://bbotte.com/kvm-xen/let-kubernetes-k8s-run-in-docker/

https://blog.csdn.net/harris135/article/details/79082008

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值