阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 7上安装Kubernetes集群部署Docker

157次阅读
没有评论

共计 7522 个字符,预计需要花费 19 分钟才能阅读完成。

1. 操作系统详情
需要三台主机,都最小化安装 CentOS 7.3, 并 update 到最新
cat /etc/RedHat-release
CentOS Linux release 7.3.1611 (Core) 
角色主机名 IP
Master      master192.168.1.14
node1    slave-1192.168.1.15
node2slave-2192.168.1.16

2. 在每台主机上关闭 firewalld 改用 iptables
输入以下命令,关闭 firewalld
systemctl stop firewalld.service    #停止 firewall
systemctl disable firewalld.service #禁止 firewall 开机启动
然后安装 iptables 并启用
yum install -y iptables-services    #安装
systemctl start iptables.service  #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动

3. 安装 ntp 服务
yum install -y ntp
systemctl start ntpd
systemctl enable ntpd

二、安装配置
注:kubernetes,etcd 等已经进去 centos epel 源,可以直接 yum 安装(需要安装 epel-release)

1. 安装 Kubernetes Master

使用以下命令安装 kubernetes 和 etcd
# yum install -y kubernetes etcd
编辑 /etc/etcd/etcd.conf 使 etcd 监听所有的 ip 地址,确保下列行没有注释,并修改为下面的值
vim /etc/etcd/etcd.conf
# [member]
ETCD_NAME=default
ETCD_DATA_DIR=”/var/lib/etcd/default.etcd”
ETCD_LISTEN_CLIENT_URLS=”http://0.0.0.0:2379″
ETCD_INITIAL_CLUSTER=”default=http://192.168.1.14:2380″
#[cluster]
ETCD_ADVERTISE_CLIENT_URLS=”http://192.168.1.14:2379″
编辑 Kubernetes API server 的配置文件 /etc/kubernetes/apiserver,确保下列行没有被注释,并为下列的值
vim /etc/kubernetes/apiserver
###
# kubernetes system config
#
# The following values are used to configure the kube-apiserver
#
# The address on the local server to listen to.
KUBE_API_ADDRESS=”–address=0.0.0.0″
# The port on the local server to listen on.
KUBE_API_PORT=”–port=8080″
# Port minions listen on
KUBELET_PORT=”–kubelet_port=10250″
# Comma separated list of nodes in the etcd cluster
KUBE_ETCD_SERVERS=”–etcd_servers=http://192.168.1.14:2379″
# Address range to use for services
KUBE_SERVICE_ADDRESSES=”–service-cluster-ip-range=10.254.0.0/16″
# default admission control policies
KUBE_ADMISSION_CONTROL=”–admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ServiceAccount,ResourceQuota”
# Add your own!
KUBE_API_ARGS=””
启动 etcd, kube-apiserver, kube-controller-manager and kube-scheduler 服务,并设置开机自启
vim /script/kubenetes_service.sh
for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES 
done
sh /script/kubenetes_service.sh
在 etcd 中定义 flannel network 的配置,这些配置会被 flannel service 下发到 nodes:
etcdctl mk /centos.com/network/config ‘{“Network”:”172.17.0.0/16″}’
添加 iptables 规则,允许相应的端口
iptables -I INPUT -p tcp –dport 2379 -j ACCEPT
iptables -I INPUT -p tcp –dport 10250 -j ACCEPT
iptables -I INPUT -p tcp –dport 8080 -j ACCEPT
iptables-save
或者写入 iptables 配置文件 /etc/sysconfig/iptables
查看节点信息(我们还没有配置节点信息,所以这里应该为空)
# kubectl get nodes
NAME            LABELS              STATUS

2. 安装 Kubernetes Minions (Nodes)
注:下面这些步骤应该在 minion1 和 minions2 上执行(也可以添加更多的 minions)
使用 yum 安装 kubernetes 和 flannel
# yum install -y flannel kubernetes
为 flannel service 配置 etcd 服务器,编辑 /etc/sysconfig/flanneld 文件中的下列行以连接到 master
# vim /etc/sysconfig/flanneld
FLANNEL_ETCD=”http://192.168.1.14:2379″        #改为 etcd 服务器的 ip
FLANNEL_ETCD_PREFIX=”/centos.com/network”
编辑 /etc/kubernetes/config 中 kubernetes 的默认配置,确保 KUBE_MASTER 的值是连接到 Kubernetes master API server:
# vim /etc/kubernetes/config
KUBE_MASTER=”–master=http://192.168.1.14:8080″
编辑 /etc/kubernetes/kubelet 如下行:
node1:
# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS=”–address=0.0.0.0″
KUBELET_PORT=”–port=10250″
KUBELET_HOSTNAME=”–hostname_override=192.168.1.15″
KUBELET_API_SERVER=”–api_servers=http://192.168.1.14:8080″
KUBELET_ARGS=””
node2:
# vim /etc/kubernetes/kubelet
KUBELET_ADDRESS=”–address=0.0.0.0″
KUBELET_PORT=”–port=10250″
KUBELET_HOSTNAME=”–hostname_override=192.168.1.16″
KUBELET_API_SERVER=”–api_servers=http://192.168.1.14:8080″
KUBELET_ARGS=””
启动 kube-proxy, kubelet, docker 和 flanneld services 服务,并设置开机自启
for SERVICES in kube-proxy kubelet docker flanneld; do
    systemctl restart $SERVICES
    systemctl enable $SERVICES
    systemctl status $SERVICES 
done
在每个 minion 节点,你应当注意到你有两块新的网卡 docker0 和 flannel0。你应该得到不同的 ip 地址范围在 flannel0 上,就像下面这样:
node1:
# ip a | grep flannel | grep inet
    inet 172.17.29.0/16 scope global flannel0
node2:
# ip a | grep flannel | grep inet
    inet 172.17.37.0/16 scope global flannel0
添加 iptables 规则:
iptables -I INPUT -p tcp –dport 2379 -j ACCEPT
iptables -I INPUT -p tcp –dport 10250 -j ACCEPT
iptables -I INPUT -p tcp –dport 8080 -j ACCEPT
现在登陆 kubernetes master 节点验证 minions 的节点状态:
# kubectl get nodes
NAME          LABELS                                STATUS
192.168.1.15  kubernetes.io/hostname=192.168.1.15  Ready
192.168.1.16  kubernetes.io/hostname=192.168.1.16  Ready
至此,kubernetes 集群已经配置并运行了,我们可以继续下面的步骤。

三、创建 Pods (Containers)
为了创建一个 pod,我们需要在 kubernetes master 上面定义一个 yaml 或者 json 配置文件。然后使用 kubectl 命令创建 pod
# mkdir -p /k8s/pods
# cd /k8s/pods/
# vim nginx.yaml
在 nginx.yaml 里面增加如下内容:
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  – name: nginx
    image: nginx
    ports:
    – containerPort: 80
创建 pod:
# kubectl create -f nginx.yaml
此时有如下报错:
Error from server: error when creating “nginx.yaml”: Pod “nginx” is forbidden: no API token found for service account default/default, retry after the token is automatically created and added to the service account
解决办法是编辑 /etc/kubernetes/apiserver 去除 KUBE_ADMISSION_CONTROL 中的 SecurityContextDeny,ServiceAccount,并重启 kube-apiserver.service 服务:
#vim /etc/kubernetes/apiserver
KUBE_ADMISSION_CONTROL=”–admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota”
#systemctl restart kube-apiserver.service
之后重新创建 pod:
# kubectl create -f nginx.yaml
pods/nginx
查看 pod:
# kubectl get pod nginx
NAME      READY    STATUS                                            RESTARTS  AGE
nginx    0/1      Image: nginx is not ready on the node  0          34s
这里 STATUS 一直是这个,创建不成功,下面排错。通过查看 pod 的描述发现如下错误:
# kubectl describe pod nginx 
Wed, 28 Oct 2015 10:25:30 +0800      Wed, 28 Oct 2015 10:25:30 +0800 1      {kubelet 192.168.1.16}  implicitly required container POD      pulled          Successfully pulled Pod container image “gcr.io/google_containers/pause:0.8.0”
  Wed, 28 Oct 2015 10:25:30 +0800      Wed, 28 Oct 2015 10:25:30 +0800 1      {kubelet 192.168.1.16}  implicitly required container POD      failed          Failed to create docker container with error: no such image
  Wed, 28 Oct 2015 10:25:30 +0800      Wed, 28 Oct 2015 10:25:30 +0800 1      {kubelet 192.168.1.16}                                          failedSync      Error syncing pod, skipping: no such image
  Wed, 28 Oct 2015 10:27:30 +0800      Wed, 28 Oct 2015 10:29:30 +0800 2      {kubelet 192.168.1.16}  implicitly required container POD      failed          Failed to pull image “gcr.io/google_containers/pause:0.8.0”: image pull failed for gcr.io/google_containers/pause:0.8.0, this may be because there are no credentials on this request.  details: (API error (500): invalid registry endpoint “http://gcr.io/v0/”. HTTPS attempt: unable to ping registry endpoint https://gcr.io/v0/
v2 ping attempt failed with error: Get https://gcr.io/v2/: dial tcp 173.194.72.82:443: i/o timeout
这里可能会遇到 pod 状态一直处于 Penning 的问题,此时可以通过 kubectl describe pods/pod-name 来查看 pod 信息,如果没有出错信息,那么 Minion 一直处于下载镜像中,下载好之后 pod 即会成功启动。
从网上找到 pause:0.8.0 的镜像,然后再每个 node 上导入镜像:
请在境外 docker 服务器执行 docker pull 命令下载镜像
gcr.io/google_containers/pause:latestgcr.io/google_containers/pause:1.0gcr.io/google_containers/pause:0.8.0
再用导出镜像
docker save -o pause.tar gcr.io/google_containers/pausegzip pause.tar
最后把这个包放到 kubernetes 环境所有的 docker 服务器上
docker load -i pause.tar.gz
在执行以下命令即可成功创建 pod
[root@master ~]#kubectl create -f nginx.yamlpods/nginx
查看 pod
[root@master ~]# kubectl get pod nginxNAME READY STATUS RESTARTS AGEnginx 1/1 Running 0 2min
前往 nodes 节点上查看 docker images
[root@slave1 ~]# docker imagesREPOSITORY                                            TAG

更多 Docker 相关教程见以下内容

Docker 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm

Ubuntu 14.04 安装 Docker  http://www.linuxidc.com/linux/2014-08/105656.htm

Ubuntu 使用 VNC 运行基于 Docker 的桌面系统  http://www.linuxidc.com/Linux/2015-08/121170.htm

阿里云 CentOS 6.5 模板上安装 Docker http://www.linuxidc.com/Linux/2014-11/109107.htm

Ubuntu 15.04 下安装 Docker  http://www.linuxidc.com/Linux/2015-07/120444.htm

在 Ubuntu Trusty 14.04 (LTS) (64-bit)安装 Docker http://www.linuxidc.com/Linux/2014-10/108184.htm

在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm

Ubuntu 16.04 上 Docker 使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142676.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-21发表,共计7522字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中