内容简介:上一篇已经介绍过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管理平台安装与使用》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Numerical Methods and Methods of Approximation in Science and En
Karan Surana / CRC Press / 2018-10-31
ABOUT THIS BOOK Numerical Methods and Methods of Approximation in Science and Engineering prepares students and other readers for advanced studies involving applied numerical and computational anal......一起来看看 《Numerical Methods and Methods of Approximation in Science and En》 这本书的介绍吧!