Kubernetes安装配置与服务部署

1. 系统环境

操作系统: 
CentOS 7 
KV存储系统,用于集群的共享配置和服务发现(类似ZooKeeper): 
etcd 3.1.0 
容器管理工具: 
Kubernetes 1.5.2 
应用容器引擎 
Docker 1.12.6 
网络规划工具,统一分配集群Docker容器的虚拟IP,并实现服务之间通信: 
Flannel 0.7.0

服务器服务
masterapiserver, controller-manager, scheduler
nodeflannel, docker, kubelet, kube-proxy
etcdetcd

2. 基本环境配置

  • 设置hosts 
    192.168.89.133 master 
    192.168.89.133 etcd 
    192.168.89.134 node1 
    PS:由于在虚拟机上面部署,所以只启动两台服务器,并且etcd和master运行在同一个物理机器上
  • 关闭防火墙 
    systemctl stop firewalld.service 
    systemctl disable firewalld.service 
    PS:第一个命令关闭防火墙,第二个命令使开机不启动防火墙(永久关闭)
  • 永久关闭SELinux 
    修改/etc/selinux/config 
    SELINUX=disabled
  • 重启机器 
    reboot

3. 安装和配置etcd

3.1 安装etcd

yum install etcd -y

3.2 配置etcd

修改/etc/etcd/etcd.conf中的部分属性 
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379" 
ETCD_ADVERTISE_CLIENT_URLS="http://etcd:2379" 
PS:其中etcd表示etcd服务器主机名

3.3 运行etcd

systemctl start etcd 
systemctl enable etcd

3.4 配置etcd内网信息

etcdctl -C 192.168.89.133: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对应

4.master服务器上安装服务

4.1 安装kubernetes-master

yum install kubernetes-master

4.2 配置apiserver

修改/etc/kubernetes/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.3 配置全局配置文件

修改/etc/kubernetes/config 
KUBE_MASTER="--master=http://master:8080"

4.4 设置开机启动并启动master服务

systemctl enable kube-apiserver kube-scheduler kube-controller-manager 
systemctl start kube-apiserver kube-scheduler kube-controller-manager

4.5 测试master服务

访问http://master:8080会返回json描述信息,如下图: 
外部主机访问master节点的apiServer端口

5.node1工作节点上安装服务

5.1 安装docker

yum install docker

5.2 安装flannel

yum install flannel

5.3 配置flannel

修改/etc/sysconfig/flanneld 
FLANNEL_ETCD_ENDPOINTS="http://etcd:2379" 
FLANNEL_ETCD_PREFIX="/atomic.io/network" 
PS:其中atomic.io与上面etcd中的Network对应

5.4 安装kubernetes-node

yum install kubernetes-node

5.5 配置全局配置文件

修改/etc/kubernetes/config 
KUBE_MASTER="--master=http://master:8080"

5.6 配置kubelet组件

修改/etc/kubernetes/kubelet 
KUBELET_HOSTNAME="--hostname-override=node1" 
KUBELET_API_SERVER="--api-servers=http://master:8080"

5.7 配置开机启动并启动服务

systemctl enable kubelet kube-proxy 
systemctl start kubelet kube-proxy

6.测试集群是否工作

在master节点运行 
kubectl get nodes 
若正常工作,可获取工作节点信息及运行状态为Ready,如下图: 
master节点获取工作节点信息

7.发布nginx服务

7.1 创建pod : nginx-pod.yaml

kubectl create -f nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:
 name: nginx-pod
 labels:
  name: nginx-pod
spec:
 containers:
 - name: nginx
   image: nginx
   ports:
   - containerPort: 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

7.2 查看pod的状态

kubectl get pods 
NAME READY STATUS RESTARTS AGE 
nginx-pod 0/1 ContainerCreating 0 6s 
等10分钟再试 
NAME READY STATUS RESTARTS AGE 
nginx-pod 1/1 Running 0 13m 
PS:这里经常会因为网络问题失败,可以先使用docker手动pull镜像后再使用kubectl来create pod,如果还是不行,就delete pod之后再create pod,实在不行,可以重启机器试试,还是不行,那就是配置出问题了

7.3 创建replicationController : nginx-rc.yaml

kubectl create -f nginx-rc.yaml

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

7.4 查看ReplicationController状况

rc状态

7.5 创建service : nginx-service.yaml

kubectl create -f nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 type: NodePort
 ports:
 - port: 80
   nodePort: 30001
 selector:
  name: nginx-pod
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

7.6 查看service状态

service状态 
PS:其中Kubernetes服务为Kube系统自带服务,无需理会

7.7 测试发布的nginx服务

使用其他机器的浏览器访问node1机器的30001端口 
外部接口访问容器服务

8. 相关文章

Kubernetes 1.5部署安装dashboard 
Kubernetes中的nodePort,targetPort,port的区别和意义

9. 参考

西楼:https://my.oschina.net/zhougui/blog/824165 
督门提酒的博客: 
http://blog.csdn.net/u010884123/article/details/56485246?locationNum=10&fps=1

10. yaml源码

https://github.com/HeYongbiao/kube_nginx

11. 学习资料

kubernetes指南:http://pan.baidu.com/s/1gfKHDAF 密码:who6

etcdctl cluster-health  查看健康状态
etcdctl member list  查看etcd集群列表

kubectl describe pods nginx-pod 查看pods日志


遇到的问题

用k8s创建完pod后,发现无法访问demo应用,查了一下pods状态,发现都在containercreationg状态中。

clip_image001

百度了一下,根据网上的方法,查了一下mysql-jn6f2这个pods的详情

clip_image003

其中最主要的问题是:details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)

解决方案:

查看/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt (该链接就是上图中的说明) 是一个软链接,但是链接过去后并没有真实的/etc/rhsm,所以需要使用yum安装:


yum install *rhsm*


安装完成后,执行一下docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

如果依然报错,可参考下面的方案:


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


这两个命令会生成/etc/rhsm/ca/redhat-uep.pem文件.

顺得的话会得到下面的结果。


[root@localhost]# docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest

Trying to pull repository registry.access.redhat.com/rhel7/pod-infrastructure ...

latest: Pulling from registry.access.redhat.com/rhel7/pod-infrastructure

26e5ed6899db: Pull complete

66dbe984a319: Pull complete

9138e7863e08: Pull complete

Digest: sha256:92d43c37297da3ab187fc2b9e9ebfb243c1110d446c783ae1b989088495db931

Status: Downloaded newer image for registry.access.redhat.com/rhel7/pod-infrastructure:latest


删除原来创建的rc


[root@localhost /]# kubectl delete -f mysql-rc.yaml


重新创建


[root@localhost /]# kubectl create -f mysql-rc.yaml

replicationcontroller "mysql" created


再次查看状态


[root@localhost /]# kubectl get pod

NAME READY STATUS RESTARTS AGE

mysql-b8m2q 1/1 Running 0 27m


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本离线安装包是kubernetes 1.10.5 版本的安装包及其依赖. 通过apt自动下载获取: $ sudo apt install -d kubeadm=1.10.5-00 kubelet=1.10.5-00 kubectl=1.10.5-00 Kubernetes 1.11.0 离线安装包下载: https://download.csdn.net/download/jiaoxiaogu/10516033 Kubernetes 1.10.5 只支持docker 17.x.x版本 docker 17.x.x 安装方法: $ sudo apt install -y docker-ce="$(apt-cache madison docker-ce | /bin/grep 17.03 | head -1 | awk '{print $3}')" 离线包使用方法: $ tar xf kubernetes-ubuntu-1.10.5.tar.gz $ cp -r kubernetes-ubuntu-1.10.5/* /var/cache/apt/archives/ $ sudo apt install kubeadm=1.10.5-00 kubelet=1.10.5-00 kubectl=1.10.5-00 安装kubernetes master: $ sudo kubeadm init --ignore-preflight-errors=all --kubernetes-version=1.10.5 可选参数: --pod-network-cidr=10.244.0.0/16 // flannel network --apiserver-advertise-address=x.x.x.x 安装包内容: $ tree -L 1 kubernetes-ubuntu-1.10.5 kubernetes-ubuntu-1.10.5 ├── ebtables_2.0.10.4-3.5ubuntu2.18.04.1_amd64.deb ├── kubeadm_1.10.5-00_amd64.deb ├── kubectl_1.10.5-00_amd64.deb ├── kubelet_1.10.5-00_amd64.deb ├── kubernetes-cni_0.6.0-00_amd64.deb └── socat_1.7.3.2-2ubuntu2_amd64.deb 0 directories, 6 files 官网下载源: https://packages.cloud.google.com/apt 官网下载地址: https://packages.cloud.google.com/apt/pool/kubeadm_1.10.5-00_amd64_599778e9ebcdf6340b3068dd19bbf3674a9d7fe37d47455879c259b2e780b62f.deb https://packages.cloud.google.com/apt/pool/kubectl_1.10.5-00_amd64_76a98e003a46be66d802b5c79ba11fdc6f10463e524e67db02db1684fd9dad8e.deb https://packages.cloud.google.com/apt/pool/kubelet_1.10.5-00_amd64_10aa030ab7d406ca639c57d16ab154b32e75f55925fb24065e33359c918722af.deb kubernetes包文件详细信息: https://packages.cloud.google.com/apt/dists/kubernetes-xenial/main/binary-amd64/Packages 官网提供Ubuntu源安装: https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl $ sudo apt-get update && sudo apt-get install -y apt-transport-https $ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - $ sudo touch /etc/apt/sources.list.d/kubernetes.list $ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list $ sudo apt-get update

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值