kubernetes安装配置

kubernetes是google公司基于docker所做的一个分布式集群,有以下主件组成

  etcd: 高可用存储共享配置和服务发现,作为与minion机器上的flannel配套使用,作用是使每台 minion上运行的docker拥有不同的ip段,最终目的是使不同minion上正在运行的docker containner都有一个与别的任意一个containner(别的minion上运行的docker containner)不一样的IP地址。

  flannel: 网络结构支持

  kube-apiserver: 不论通过kubectl还是使用remote api 直接控制,都要经过apiserver

  kube-controller-manager: 对replication controller, endpoints controller, namespace controller, and serviceaccounts controller的循环控制,与kube-apiserver交互,保证这些controller工作

  kube-scheduler: Kubernetes scheduler的作用就是根据特定的调度算法将pod调度到指定的工作节点(minion)上,这一过程也叫绑定(bind)

  kubelet: Kubelet运行在Kubernetes Minion Node上. 它是container agent的逻辑继任者

  kube-proxy: kube-proxy是kubernetes 里运行在minion节点上的一个组件, 它起的作用是一个服务代理的角色

图为GIT+Jenkins+Kubernetes+Docker+Etcd+confd+Nginx+Glusterfs架构:

如下:

环境:

centos7系统机器三台:

192.168.1.165: 用来安装kubernetes master

192.168.1.247: 用作kubernetes minion (minion1)

一、关闭系统运行的防火墙及selinux

1。如果系统开启了防火墙则按如下步骤关闭防火墙(所有机器)

# systemctl stop firewalld # systemctl disable firewalld

2.关闭selinux


1

2


#setenforce 0

#sed -i '/^SELINUX=/cSELINUX=disabled' /etc/sysconfig/selinux

二、MASTER安装配置

1. 安装并配置Kubernetes master(yum 方式)


1

# yum -y install etcd kubernetes

 

配置etcd。确保列出的这些项都配置正确并且没有被注释掉,下面的配置都是如此 


1

2

3

4

5

6


#vim /etc/etcd/etcd.conf



ETCD_DATA_DIR="/var/lib/etcd/default.etcd"

ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

ETCD_NAME="default"

ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"

配置kubernetes

vim /etc/kubernetes/apiserver

KUBE_API_ADDRESS="--address=0.0.0.0"

KUBE_API_PORT="--port=8080"

KUBELET_PORT="--kubelet_port=10250"

KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.1.165:2379"

KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"

KUBE_ADMISSION_CONTROL="--admission_control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

KUBE_API_ARGS=""

2. 启动etcd, kube-apiserver, kube-controller-manager and kube-scheduler服务


1

# for SERVICES in etcd kube-apiserver kube-controller-manager kube-scheduler; do systemctl restart $SERVICES ;systemctl enable $SERVICES ;systemctl status $SERVICES ; done; 

3.设置etcd网络


1

#etcdctl -C 192.168.1.165:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

报错如下:

parse 192.168.1.165:2379: first path segment in URL cannot contain colon

解决方法:

etcdctl -C http://127.0.0.1:2379 set /atomic.io/network/config '{"Network":"10.1.0.0/16"}'

{"Network":"10.1.0.0/16"}

4. 至此master配置完成,运行kubectl get nodes可以查看有多少minion在运行,以及其状态。这里我们的minion还都没有开始安装配置,所以运行之后结果为空


1

# kubectl get nodes 

三、MINION安装配置(每台minion机器都按如下安装配置)

1. 环境安装和配置


1

# yum -y install flannel kubernetes

  配置kubernetes连接的服务端IP


1

2

3


#vim /etc/kubernetes/config 修改以下两个配置项

KUBE_MASTER="--master=http://192.168.1.165:8080"

KUBE_ETCD_SERVERS="--etcd_servers=http://192.168.1.165:2379"

  配置kubernetes  ,(请使用每台minion自己的IP地址比如192.168.1.247:代替下面的$LOCALIP)


1

2

3

4

5


#vim /etc/kubernetes/kubelet 红色标记的要调整,具体看后面的步骤,否则创建pod会失败。

KUBELET_ADDRESS="--address=0.0.0.0"

KUBELET_HOSTNAME="--hostname-override=192.168.1.247"

KUBELET_API_SERVER="--api-servers=http://192.168.1.165:8080"

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

KUBELET_ARGS=""

2. 准备启动服务(如果本来机器上已经运行过docker的请看过来,没有运行过的请忽略此步骤)

运行ifconfig,查看机器的网络配置情况(有docker0)


1

2

3

4

5


# ifconfig docker0

Link encap:Ethernet HWaddr 02:42:B2:75:2E:67 inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP

BROADCAST MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0

errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0

RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

  warning:在运行过docker的机器上可以看到有docker0,这里在启动服务之前需要删掉docker0配置,在命令行运行:sudo ip link delete docker0

3.配置flannel网络


1

2

3


#vim /etc/sysconfig/flanneld

FLANNEL_ETCD_ENDPOINTS="http://192.168.1.165:2379"

FLANNEL_ETCD_PREFIX="/atomic.io/network"

PS:其中atomic.io与上面etcd中的Network对应

4. 启动服务


1

# for SERVICES in flanneld kube-proxy kubelet docker; do systemctl restart $SERVICES ;systemctl enable $SERVICES ;systemctl status $SERVICES; done

四、配置完成验证安装

确定minion(192.168.1.247)和一台master(192.168.1.165)都已经成功的安装配置并且服务都已经启动了。

切换到master机器上,运行命令kubectl get nodes


1

2

3

4


# kubectl get nodes

NAME            STATUS    AGE

192.168.1.247   Ready     6h

  可以看到配置的minion已经在master的node列表中了。如果想要更多的node,只需要按照minion的配置,配置更多的机器就可以了。

三、Kubernetes之深入了解Pod

2、Pod基本用法:

  在使用docker时,我们可以使用docker run命令创建并启动一个容器,而在Kubernetes系统中对长时间运行的容器要求是:其主程序需要一直在前台运行。如果我们创建的docker镜像的启动命令是后台执行程序,例如Linux脚本:

  nohup ./startup.sh &

  则kubelet创建包含这个容器的pod后运行完该命令,即认为Pod执行结束,之后根据RC中定义的pod的replicas副本数量生产一个新的pod,而一旦创建出新的pod,将在执行完命令后陷入无限循环的过程中,这就是Kubernetes需要我们创建的docker镜像以一个前台命令作为启动命令的原因。

  对于无法改造为前台执行的应用,也可以使用开源工具supervisor辅助进行前台运行的功能。

****Pod可以由一个或多个容器组合而成

例如:两个容器应用的前端frontend和redis为紧耦合的关系,应该组合成一个整体对外提供服务,则应该将这两个打包为一个pod.

配置文件frontend-localredis-pod.yaml如下,刚开始的时候没有直接复制,yaml对格式严格要求,所以可以通过kubectl create -f frontend-localredis-pod.yaml --dry-run --validate=true检查配置文件哪里有问题。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16




apiVersion: v1

kind: Pod

metadata:

name: redis-php

labels:

name: redis-php

spec:

containers:

- name: frontend

image: kubeguide/guestbook-php-frontend:localredis

ports:

- containerPort: 80

- name: redis-php

image: kubeguide/redis-master

ports:

- containerPort: 637

  

kubernetes启动pod,pod状态一直不正常,查看pod状态显示

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)

按照网上所说的解决方案:yum install *rhsm* -y

Failed to create pod infra container: ImagePullBackOff; Skipping pod "redis-master-jj6jw_default(fec25a87-cdbe-11e7-ba32-525400cae48b)": Back-off pulling image "registry.access.redhat.com/rhel7/pod-infrastructure:latest

解决方法:试试通过手动下载

docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

docker pull 是还是报错

open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory

查看下redhat-ca.crt确实不存在,registry.access.redhat.com/rhel7/pod-infrastructure:latest默认是https下载。

最终解决方案:

1.docker search pod-infrastructure

docker search pod-infrastructure

INDEX       NAME                                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

docker.io   docker.io/openshift/origin-pod                      The pod infrastructure image for OpenShift 3    8

docker.io   docker.io/davinkevin/podcast-server                 Container around the Podcast-Server Applic...   5

docker.io   docker.io/infrastructureascode/aws-cli              Containerized AWS CLI on alpine to avoid r...   4                    [OK]

docker.io   docker.io/newrelic/infrastructure                   Public image for New Relic Infrastructure.      4

docker.io   docker.io/infrastructureascode/uwsgi                uWSGI application server                        2                    [OK]

docker.io   docker.io/infrastructureascode/serf                 A tiny Docker image with HashiCorp Serf us...   1                    [OK]

docker.io   docker.io/mosquitood/k8s-rhel7-pod-infrastructure                                                   1

docker.io   docker.io/podigg/podigg-lc-hobbit                   A HOBBIT dataset generator wrapper for PoDiGG   1                    [OK]

docker.io   docker.io/stefanprodan/podinfo                      Kubernetes multi-arch pod info                  1

docker.io   docker.io/tianyebj/pod-infrastructure               registry.access.redhat.com/rhel7/pod-infra...   1

docker.io   docker.io/w564791/pod-infrastructure                latest                                          1

docker.io   docker.io/infrastructureascode/hello-world          A tiny "Hello World" web server with a hea...   0                    [OK]

docker.io   docker.io/jqka/pod-infrastructure                   redhat pod                                      0                    [OK]

docker.io   docker.io/ocpqe/hello-pod                           Copy form docker.io/deshuai/hello-pod:latest    0

docker.io   docker.io/oudi/pod-infrastructure                   pod-infrastructure                              0                    [OK]

docker.io   docker.io/sebastianhutter/podcaster                 python script to download podcasts https:/...   0                    [OK]

docker.io   docker.io/shadowalker911/pod-infrastructure                                                         0

docker.io   docker.io/statemood/pod-infrastructure              Automated build from registry.access.redha...   0                    [OK]

docker.io   docker.io/tfgco/podium                              Podium is a blazing-fast player ranking se...   0

docker.io   docker.io/trancong/pod2consul                       register pod with consul                        0

docker.io   docker.io/tundradotcom/podyn                        dockerized Podyn                                0

docker.io   docker.io/vistalba/podget                           Podget Docker with rename included.             0                    [OK]

docker.io   docker.io/wedeploy/infrastructure                                                                   0

docker.io   docker.io/xplenty/rhel7-pod-infrastructure          registry.access.redhat.com/rhel7/pod-infra...   0

docker.io   docker.io/zengshaoyong/pod-infrastructure           pod-infrastructure                              0                    [OK]

2.vi /etc/kubernetes/kubelet

替换为上面第一个节点(Deven:后面改回去了也没有报错了,所以这个步骤可能不是必须的。) KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=docker.io/openshift/origin-pod"

3.重启

systemctl restart kube-apiserver
systemctl restart kube-controller-manager
systemctl restart kube-scheduler
systemctl restart kubelet

systemctl restart kube-proxy

4. kubectl get pods 查看之前的pods已经正常状态Running

属于一个Pod的多个容器应用之间相互访问只需要通过localhost就可以通信,这一组容器被绑定在一个环境中。

使用kubectl create创建该Pod后,get pod信息可以看到如下图:


1

2

3

#kubectl get pods

NAME          READY     STATUS    RESTARTS   AGE

myweb-1rr24   1/1       Running   1          27m

redis-php     2/2       Running   0          16s

  查看pod的详细信息,可以看到两个容器的定义和创建过程。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19




#kubectl describe pods redis-php

Name:           redis-php

Namespace:      default

Node:           192.168.1.247/192.168.1.247

Start Time:     Sat, 04 Aug 2018 17:37:53 +0800

Labels:         name=redis-php

Status:         Running

IP:             10.1.49.3

Controllers:    <none>

Containers:

frontend:

Container ID:               docker://1c109acce5c81f57f7c02619c489855ae67ece114fdfa104189521e1f2fc052b

Image:                      kubeguide/guestbook-php-frontend:localredis

Image ID:                   docker-pullable://docker.io/kubeguide/[email protected]:37c2c1dcfcf0a51bf9531430fe057bcb1d4b94c64048be40ff091f01e384f81e

Port:                       80/TCP

State:                      Running

Started:                  Sat, 04 Aug 2018 17:37:54 +0800

Ready:                      True

Restart Count:              0

Volume Mounts:              <none>

Environment Variables:      <none>

redis-php:

Container ID:               docker://6edf7724a548f178975eb9abcbee675788720a5d804867124f1dc454e7e3b058

Image:                      kubeguide/redis-master

Image ID:                   docker-pullable://docker.io/kubeguide/[email protected]:e11eae36476b02a195693689f88a325b30540f5c15adbf531caaecceb65f5b4d

Port:                       6379/TCP

State:                      Running

Started:                  Sat, 04 Aug 2018 17:38:00 +0800

Ready:                      True

Restart Count:              0

Volume Mounts:              <none>

Environment Variables:      <none>

Conditions:

Type          Status

Initialized   True

Ready         True

PodScheduled  True

No volumes.

QoS Class:      BestEffort

Tolerations:    <none>

Events:

FirstSeen     LastSeen        Count   From                    SubObjectPath                   Type            Reason      Message

---------     --------        -----   ----                    -------------                   --------        ------      -------

2m            2m              1       {default-scheduler }                                    Normal          Scheduled   Successfully assigned redis-php to 192.168.1.247

2m            2m              1       {kubelet 192.168.1.247} spec.containers{frontend}       Normal          Pulled      Container image "kubeguide/guestbook-php-frontend:localredis" already present on machine

2m            2m              1       {kubelet 192.168.1.247} spec.containers{frontend}       Normal          Created     Created container with docker id 1c109acce5c8; Security:[seccomp=unconfined]

2m            2m              1       {kubelet 192.168.1.247} spec.containers{frontend}       Normal          Started     Started container with docker id 1c109acce5c8

2m            2m              1       {kubelet 192.168.1.247} spec.containers{redis-php}      Normal          Pulling     pulling image "kubeguide/redis-master"

2m            2m              3       {kubelet 192.168.1.247}                                 Warning         MissingClusterDNS    kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.

2m            2m              1       {kubelet 192.168.1.247} spec.containers{redis-php}      Normal          Pulled      Successfully pulled image "kubeguide/redis-master"

2m            2m              1       {kubelet 192.168.1.247} spec.containers{redis-php}      Normal          Created     Created container with docker id 6edf7724a548; Security:[seccomp=unconfined]

2m            2m              1       {kubelet 192.168.1.247} spec.containers{redis-php}      Normal          Started     Started container with docker id 6edf7724a548

  

原文地址:http://blog.51cto.com/wwdhks/2154711

时间: 2024-10-03 22:28:52

kubernetes安装配置的相关文章

Kubernetes安装配置指南(二进制安装)

以二进制文件方式安装Kubernetes集群 k8s下载地址:https://github.com/kubernetes/kubernetes/releases wget https://dl.k8s.io/v1.14.0/kubernetes-server-linux-amd64.tar.gz wget https://dl.k8s.io/v1.14.0/kubernetes-client-linux-amd64.tar.gz wget https://dl.k8s.io/v1.14.0/ku

[ci] jenkins kubernetes插件配置-通过jnlp

jenkins kubernetes插件 首先插件管理,搜索kubernetes plugin安装 配置kubernetes云 配置项目 执行成功 有pod tmplate 有container template

Kubernetes安装手记-kubeadm

十.Kubernetes实践篇 10.1) Kubernetes安装三种方式(官方提供) 10.1.1)minikubeMinikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用.不能用于生产环境. 官方文档: https://kubernetes.io/docs/setup/minikube/ 10.1.2)kubeadmkubeadm可帮助你快速部署一套kubernetes集群.kubeadm设计目的为新用户开始尝试kubern

CentOS 6.9中Telnet的安装配置

Telnet:TCP/IP协议中的一员,是Internet远程登录服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力.要开始一个Telnet会话,必须输入用户名和密码来登录服务器.Telnet是常用的远程控制Web服务器的方法,监听TCP的23号端口. xinetd:新一代的网络超级守护进程,经常用来管理多种轻量级的Internet服务.xinetd提供类似于inetd+tcp_wrapper的功能,但它更强大更安全.xinetd能够同时监听多个指定的端口,在接受用户请

使用LVS实现负载均衡原理及安装配置详解

转:http://www.cnblogs.com/liwei0526vip/p/6370103.html 使用LVS实现负载均衡原理及安装配置详解 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F5.Netscale.这里主要是学习 LVS 并对其进行了详细的总结记录. 一.负载均衡LVS基本介绍 LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director

47 监控系统基础及zabbix介绍、zabbix工作原理及安装配置、zabbix on CentOS7、zabbix配置

02    zabbix工作原理及安装配置 配置环境 node1192.168.1.120CentOS6.7 node2192.168.1.121CentOS6.7 1.安装配置zabbix #安装前准备 [[email protected] ~]#yum -y install mysql-server mysq [[email protected] ~]# mysql mysql> CREATE DATABASE zabbix CHARACTER SET utf8; mysql> GRANT

详解“FTP文件传输服务”安装配置实例

"FTP文件传输服务"安装配置实例 家住海边喜欢浪:zhang789.blog.51cto.com 目录 简介 ftp工作原理 常见的FTP服务 Vsftpd服务器的安装 Vsftpd.conf配置文件详解 配置FTP服务器实例 实例:配置匿名用户 实例:配置本地用户登录 实例:配置虚拟用户登录(MySQL认证) 实例:控制用户登录 实例:设置欢迎信息 分析vsftpd日志管理 FTP服务器配置与管理 简介 FTP 是File Transfer Protocol(文件传输协议)的英文简

redis应用之安装配置介绍

一.redis介绍: 1.redis定义: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API.从2010年3月15日起,Redis的开发工作由VMware主持.redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set --有序集合)和hash(哈希类型).这些数据类型都

Linux下安装配置MongoDB数据库

说明: 操作系统:CentOS 5.X 64位 IP地址:192.168.21.130 实现目的: 安装配置MongoDB数据库 具体操作: 一.关闭SElinux.配置防火墙 1.vi /etc/selinux/config #SELINUX=enforcing #注释掉 #SELINUXTYPE=targeted #注释掉 SELINUX=disabled #增加 :wq!  #保存退出 setenforce 0 #使配置立即生效 2.vi /etc/sysconfig/iptables