内容简介:上一篇已经介绍过docker的单机安装,然后单机安装1是没有高可用,2是每次上去手工创建docker实例,建多了之后都不记得哪个打哪个,管理不方便。于是又诞生了各种专门为了管理docker的创建、调度、销毁的平台,其中kerbernetes是比较主流的解决方案。(简称k8s)
上一篇已经介绍过 docker 的单机安装,然后单机安装1是没有高可用,2是每次上去手工创建docker实例,建多了之后都不记得哪个打哪个,管理不方便。
于是又诞生了各种专门为了管理docker的创建、调度、销毁的平台,其中kerbernetes是比较主流的解决方案。(简称k8s)
实验环境:
操作系统: CentOS7
kerbernetes集群: 实验中kerbernetes管理节点是单机部署,没有按照集群部署
节点 | IP地址 |
master | 10.1.30.34 |
etcd | 10.1.30.34 |
镜像仓库 | 10.1.30.34:5000 |
node01 | 10.1.30.35 |
node02 | 10.1.30.36 |
1、环境准备:
1.1关闭防火墙
systemctl stop firewalld systemctl disable firewalld
1.2关闭selinux
setenforce 0 vi /etc/selinux/config
SELINUX=disabled
1.3配置yum源与安装扩展yum
使用阿里云的yum源,配置略,参考【实践演练】Linux操作系统04-配置yum源 https://blog.51cto.com/14423403/2416049
1.4修改hostname
修改hostname
vi /etc/hostname
#每台修改为自己对应的名字;
10.1.30.34输入master
10.1.30.35输入node01
10.1.30.36输入node02
另外需要输入hostname 直接修改hostname,然后重启机器生效
1.5修改hosts表
3台都需要修改
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain 10.1.30.34 master 10.1.30.34 etcd 10.1.30.35 node01 10.1.30.36 node02
1.6配置免密登录
ssh-keygen
//一路回车默认即可
ssh-copy-id {其他机器的ip}
远程其他机器的时候,提示Are you sure you want to continue connecting (yes/no)?
按yes继续,然后提示输入目标主机的密码。
然后ssh 其他机器IP测试,如果没有提示输入密码即可远程登录,操作完成。
2、Master安装:
以下2.X内容,只需要在Master(10.1.30.34节点安装),Node不需要。
2.1安装etcd服务
yum install etcd -y
配置etcd
vi /etc/etcd/etcd.conf
ETCD_LISTEN_CLIENT_URLS="http://localhost:2379,http://10.1.30.34:2379" ETCD_ADVERTISE_CLIENT_URLS="http://10.1.30.34:2379"
运行etcd
systemctl start etcd systemctl enable etcd
配置etcd内网信息
etcdctl set /k8s/network/config '{"Network": "173.16.0.0/16"}'
#此网段用于后续通过yaml创建docker实例时,给多个pod组成的Service Cluster分配IP地址使用。并且配置需要与后面flannel保持一致,才能正常与node通信给分配地址。
#注意173.16.0.0/16这个可以随便改,但是要用16位的,24位的会有问题。
2.2安装kurbernets master
yum install kubernetes-master -y
配置API Server
vi /etc/kubernetes/apiserver KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://10.1.30.34:2379" KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=173.16.0.0/16" KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota"
#注意需要去掉KUBE_ADMISSION_CONTROL默认的中的 SecurityContextDeny 和 ServiceAccount ,与权限配置相关,实验不需要。
# --service-cluster-ip-range需要与etcd设置的内网网段一致
配置全局文件
vi /etc/kubernetes/config
KUBE_MASTER="--master=http://10.1.30.34:8080"
启动服务,并且服务设置开机启动
systemctl enable kube-apiserver kube-scheduler kube-controller-manager systemctl restart kube-apiserver kube-scheduler kube-controller-manager
验证测试:
网页访问http://10.1.30.34:8080/,有返回则正常。
3、Node安装:
以下3.X内容,除非特殊说明,否则仅需在Node节点安装,Master无需安装。
3 .1安装docker( master、node都需要安装 )
yum install docker -y systemctl start docker
拉取小镜像测试
docker run busybox echo "Hello world"
3 .2安装flannel ( master、node都需要安装 )
#flannel用于kurbernets master与node,node与node之间的内部通信,kurbernets本身不提供该项功能,同类的还有calico,需要额外安装。
yum install flannel -y
配置flannel vi /etc/sysconfig/flanneld
FLANNEL_ETCD_ENDPOINTS="http://10.1.30.34:2379" FLANNEL_ETCD_PREFIX="/k8s/network"
#注意/k8s/network与之前etcd配置保持一致
3.3安装kubernetes node
yum install kubernetes-node -y
编辑全局配置文件
vi /etc/kubernetes/config
KUBE_MASTER="--master=http://10.1.30.34:8080"
编辑kubelet组件
#此组件很重要,配置错误yaml经常无法正常创建docker
vi /etc/kubernetes/kubelet
KUBELET_ADDRESS="--address=0.0.0.0"
#对所有接口开放,使master能够登录node查看pod信息;该参数默认为127.0.0.1
KUBELET_PORT="--port=10250"
KUBELET_HOSTNAME="--hostname-override=node01"
#node01、02按实际修改
KUBELET_API_SERVER="--api-servers=http://10.1.30.34:8080"
# pod infrastructure container
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
# 修改根镜像下载地址,默认为registry.access.redhat.com/rhel7/pod-infrastructure:latest,yaml后面创建docker,kubectl get pod后面,pod一直卡在ContainerCreating不变为running,会有个报错。也可以修改为私有镜像仓库,参见“下一篇k8s私有镜像仓库的搭建”,可以修改为registry:5000/ pod-infrastructure:latest",那么所有镜像就能从registry那边pull与push了 。
# Add your own!
KUBELET_ARGS="--cluster_dns=173.16.0.100 --cluster_domain=cluster.local"
#添加DNS配置项,173.16.0.100的地址,在etcd配置的网段里面,随便选择一个IP地址都可以, 注意一定要是etcd配置的地址段 。
修改dns解析配置( 注意只有这一步master也需要修改 )
vi /etc/resolv.conf
将内部信息改为(追加)
search default.svc.cluster.local svc.cluster.local cluster.local nameserver 173.16.0.100
启动服务与设置开机启动
systemctl enable kubelet kube-proxy systemctl restart kubelet kube-proxy
每次修改配置后的配置重载与服务重启(必须daemon-reload重载,修改才生效)
systemctl daemon-reload systemctl restart kubelet kube-proxy
Node整体服务开启
systemctl restart flanneld systemctl daemon-reload systemctl restart docker systemctl restart kubelet kube-proxy iptables -P FORWARD ACCEPT
#不加node与master的通信会有问题
4、创建实例:
在master运行
kubectl get node
返回节点ready,表示节点已正常。
kubectl get pod表示no resource,表示还未有创建实例。
在master上配置 rc 的 yaml 文件与 svc 的 yaml 文件,用于在node创建docker实例。使用tomcat进行测试。
vi myweb-rc.yaml
apiVersion: v1 kind: ReplicationController metadata: name: myweb spec: replicas: 2 selector: app: myweb template: metadata: labels: app: myweb spec: containers: - name: myweb image: tomcat ports: - containerPort: 8080 env: - name: MYSQL_SERVICE_HOST value: 'mysql' - name: MYSQL_SERVICE_PORT value: '3306'
#其中replicas: 2 表示2个pod, 相当于2个副本 。
image: tomcat,这里可以修改不同的镜像源/tomcat,注意本篇文章的各种配置参数, 适用于直接写image: tomcat,不要加其他前缀 。
后面说完如何创建私有仓库后,改为 image: registry:5000/tomcat, 但是需要先创建私有镜像仓库。
编辑svc文件
vi myweb-svc.yaml
apiVersion: v1 kind: Service metadata: name: myweb spec: type: NodePort ports: - port: 8080 name: myweb-svc nodePort: 30001 selector: app: myweb
创建pod与svc
kubectl create -f myweb-rc.yaml kubectl create -f myweb-svc.yaml
#删除可以将create改为delete
查看结果
kubectl get pod kubectl get svc
测试docker实例是否可用
可以直接访问node:30001端口进行测试,看是否正常返回tomcat页面。
如10.1.30.35:30001
5、排错:
如果发现pod一直卡在ContainerCreating,没有变为running
到node上面运行如下命令查看日志
journalctl -u kubelet -f
发现报错
ErrImagePull; Skipping pod "myweb-d73gs_default(b120badd-9df6-11e9-92af-0050569ba5d7)": image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory
发现各个node节点无法从红帽源pull取dokcer镜像。
解决方法:( 每个node节点都需要,Master不需要 )
yum install *rhsm*
然后执行
wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm
然后执行
rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem
然后执行
docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
回到master,删除myweb-rc,重新创建myweb-rc
kubectl delete -f myweb-rc.yaml kubectl create -f myweb-rc.yaml
等待一会儿,重新kubectl get pod
NAME READY STATUS RESTARTS AGE myweb-j916d 1/1 Running 0 47m myweb-m962p 1/1 Running 0 47m
pod正常运行,变为running状态。
kubectl get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes 173.16.0.1 <none> 443/TCP 6h myweb 173.16.133.17 <nodes> 8080:30001/TCP 5h
重新访问10.1.30.35:30001测试。
以上所述就是小编给大家介绍的《【实战演练】kubernetes&docker-kubernetes管理平台安装与使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- windows 应急流程及实战演练
- Knative 入门系列7:实战演练
- 攻防演练实战中的若干Tips
- Pwn学习笔记:Defcon靶机实战演练
- 一文看懂Rabbitmq,从安装到实战演练
- 原 荐 缓存架构之史上讲的最明白的RabbitMQ可靠消息传输实战演练
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。