我的编程空间,编程开发者的网络收藏夹
学习永远不晚

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

本篇文章为大家展示了k8s Kubernetes v1.10.0 集群安装以及踩坑过程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

因工作需求,最近开始研究docker及k8s相关的资料,本文主要记录 kubernetes 安装过程及踩过的坑。坑是挺多,过来就好了!如有错漏,望予指正。

系统环境

CentOS 7.4

硬件环境

IP地址机器名称角色
10.8.51.76server主节点
10.8.51.77node-1从节点
10.8.51.78node-2从节点

初始化环境

初始化环境之后,建议重新启动机器

修改主机名,建议统一

hostnamectl set-hostname serverhostnamectl set-hostname node-1hostnamectl set-hostname node-2

修改/etc/hosts 文件增加主机映射

#node-2 为当前节点的主机名称127.0.0.1   localhost node-2 localhost4 localhost4.localdomain4::1         localhost node-2 localhost6 localhost6.localdomain610.8.51.76      server10.8.51.77      node-110.8.51.78      node-2

免身份认证(建议弄上,主要是方便)

ssh-keygen  #一路回车即可ssh-copy-id  serverssh-copy-id  node-1ssh-copy-id  node-2

关闭防火墙、关闭Swap、关闭Selinux

#关闭防火墙systemctl stop firewalldsystemctl disable firewalld#关闭交换内存,必须关闭.不关容易出错swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab#关闭selinux setenforce  0 sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/sysconfig/selinux sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/sysconfig/selinux sed -i "s/^SELINUX=permissive/SELINUX=disabled/g" /etc/selinux/config #更改文件最大打开数echo "* soft nofile 65536" >> /etc/security/limits.confecho "* hard nofile 65536" >> /etc/security/limits.confecho "* soft nproc 65536"  >> /etc/security/limits.confecho "* hard nproc 65536"  >> /etc/security/limits.confecho "* soft  memlock  unlimited"  >> /etc/security/limits.confecho "* hard memlock  unlimited"  >> /etc/security/limits.conf#配置IP转发,充许编辑 /etc/sysctl.d/k8s.conf 文件,增加net.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1#完成后使其生效sysctl -p /etc/sysctl.d/k8s.conf

Docker安装

Kubernetes 1.10.0 与期相附的docker版本,不指定版本会导致docker版本过高,k8s无法正常启动

#下载指定版本dockerwget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpmwget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm#安装rpm -ivh docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpmrpm -ivh docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm#设置开机自启systemctl enable docker#启动dockersystemctl start docker#查看状态docker info #查看版本docker version

此处可配置一下国内镜像加速

使用阿里云镜像加速器:阿里云容器hub https://dev.aliyun.com/search.html;登录之后,进入管理中心-->镜像加速器-->操作文档,根据提示进行设置即可。 如下图:

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

配置Docker

这里要是不修改,容器无法透过自身的防火墙
开启iptables filter表的FORWARD链
编辑/lib/systemd/system/docker.service,在ExecStart=..上面加入如下内容:

ExecStartPost=/usr/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPTExecStart=/usr/bin/dockerd

拉取镜像,由于国内无法连上google(k8s.gcr.io)相关服务,需要事先将所需镜像拉取过来。此处要是可以翻墙的话,可以省略以下步骤

server节点#拉取镜像docker pull keveon/kube-apiserver-amd64:v1.10.0docker pull keveon/kube-scheduler-amd64:v1.10.0docker pull keveon/kube-controller-manager-amd64:v1.10.0docker pull keveon/kube-proxy-amd64:v1.10.0docker pull keveon/k8s-dns-kube-dns-amd64:1.14.8docker pull keveon/k8s-dns-dnsmasq-nanny-amd64:1.14.8docker pull keveon/k8s-dns-sidecar-amd64:1.14.8docker pull keveon/etcd-amd64:3.1.12docker pull keveon/flannel:v0.10.0-amd64docker pull keveon/pause-amd64:3.1#修改镜像名称,与k8s原服务需求镜像保持一致docker tag keveon/kube-apiserver-amd64:v1.10.0 k8s.gcr.io/kube-apiserver-amd64:v1.10.0docker tag keveon/kube-scheduler-amd64:v1.10.0 k8s.gcr.io/kube-scheduler-amd64:v1.10.0docker tag keveon/kube-controller-manager-amd64:v1.10.0 k8s.gcr.io/kube-controller-manager-amd64:v1.10.0docker tag keveon/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0docker tag keveon/k8s-dns-kube-dns-amd64:1.14.8 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.8docker tag keveon/k8s-dns-dnsmasq-nanny-amd64:1.14.8 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.8docker tag keveon/k8s-dns-sidecar-amd64:1.14.8 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.8docker tag keveon/etcd-amd64:3.1.12 k8s.gcr.io/etcd-amd64:3.1.12docker tag keveon/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64docker tag keveon/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1#删除原镜像docker rmi keveon/kube-apiserver-amd64:v1.10.0docker rmi keveon/kube-scheduler-amd64:v1.10.0docker rmi keveon/kube-controller-manager-amd64:v1.10.0docker rmi keveon/kube-proxy-amd64:v1.10.0docker rmi keveon/k8s-dns-kube-dns-amd64:1.14.8docker rmi keveon/k8s-dns-dnsmasq-nanny-amd64:1.14.8docker rmi keveon/k8s-dns-sidecar-amd64:1.14.8docker rmi keveon/etcd-amd64:3.1.12docker rmi keveon/flannel:v0.10.0-amd64docker rmi keveon/pause-amd64:3.1

 node节点,拉取镜像,其中 dashboard以及heapster也可放到主节点上

node 节点#拉取镜像docker pull keveon/kube-proxy-amd64:v1.10.0docker pull keveon/flannel:v0.10.0-amd64docker pull keveon/pause-amd64:3.1docker pull keveon/kubernetes-dashboard-amd64:v1.8.3docker pull keveon/heapster-influxdb-amd64:v1.3.3docker pull keveon/heapster-grafana-amd64:v4.4.3docker pull keveon/heapster-amd64:v1.4.2#修改镜像名称docker tag keveon/flannel:v0.10.0-amd64 quay.io/coreos/flannel:v0.10.0-amd64docker tag keveon/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1docker tag keveon/kube-proxy-amd64:v1.10.0 k8s.gcr.io/kube-proxy-amd64:v1.10.0docker tag keveon/kubernetes-dashboard-amd64:v1.8.3 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3docker tag keveon/heapster-influxdb-amd64:v1.3.3 k8s.gcr.io/heapster-influxdb-amd64:v1.3.3docker tag keveon/heapster-grafana-amd64:v4.4.3 k8s.gcr.io/heapster-grafana-amd64:v4.4.3docker tag keveon/heapster-amd64:v1.4.2 k8s.gcr.io/heapster-amd64:v1.4.2#删除原镜像docker rmi keveon/kube-proxy-amd64:v1.10.0docker rmi keveon/flannel:v0.10.0-amd64docker rmi keveon/pause-amd64:3.1docker rmi keveon/kubernetes-dashboard-amd64:v1.8.3docker rmi keveon/heapster-influxdb-amd64:v1.3.3docker rmi keveon/heapster-grafana-amd64:v4.4.3docker rmi keveon/heapster-amd64:v1.4.2

安装配置kubernetes

每个节点均需要执行

修改 kubernetes 源

cat > /etc/yum.repos.d/kubernetes.repo <<EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0EOF

安装kubeadm

最新版使用 yum install -y kubeadm安装,我们需要安装指定版本,执行

#查看有那些版本可以安装yum list kubeadm --showduplicates#安装指定版本yum install kubeadm-1.10.0 kubectl-1.10.0-0 kubelet-1.10.0-0#开机启动systemctl enable kubelet#启动systemctl start kubelet这时系统启动时,会报错,先不用管他。因为还没有初始化。初始化后就没事了。

修改kubeadm 配置文件

#这里的坑不少,一定要注意文件编码格式,行的未尾有没有其它不可见字符.要不初始化的时候过不去vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf #修改这一行,此处cgroupfs 要与docker info 中的一致Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"#添加这一行Environment="KUBELET_EXTRA_ARGS=--v=2 --fail-swap-on=false --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/k8sth/pause-amd64:3.0"#完整版如下[Service]Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"Environment="KUBELET_DNS_ARGS=--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"Environment="KUBELET_AUTHZ_ARGS=--authorization-mode=Webhook --client-ca-file=/etc/kubernetes/pki/ca.crt"Environment="KUBELET_CADVISOR_ARGS=--cadvisor-port=0"Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"Environment="KUBELET_CERTIFICATE_ARGS=--rotate-certificates=true --cert-dir=/var/lib/kubelet/pki"Environment="KUBELET_EXTRA_ARGS=--v=2 --fail-swap-on=false --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/k8sth/pause-amd64:3.0"ExecStart=ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS $KUBELET_EXTRA_ARG配置好后可使用scp /etc/systemd/system/kubelet.service.d/10-kubeadm.conf root@node-1:/etc/systemd/system/kubelet.service.d/10-kubeadm.conf 命令将文件传输至子节点

重新加载配置

#重新载入配置systemctl daemon-reload#重启kubelet服务systemctl restart kubelet

初始化集群

#初始化集群时,增加自己本机IP地址,我们前的服务器为多网卡,指定其中主IP即可kubeadm init --apiserver-advertise-address 10.8.51.76 --pod-network-cidr=10.244.0.0/16  --kubernetes-version=v1.10.0#初始化失败时重置命令kubeadm reset

这里很关键,我有好几次都是死在了这个地方。出错不要担心,避免如下几点可大大增加成功机率

1.配置文件中/etc/systemd/system/kubelet.service.d/10-kubeadm.conf  cgroupfs的设置与docker info的一致2.编辑配置文件时,注意行尾的不可见字符*******特别是ctrl +c ctrl + v 的朋友3.拉取镜像后的名称不要忘记修改4.查看出错日志 /var/log/messages

成功后的效果图如下:(自己的忘记截了,这是网上找的)

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

将上图信息中的

#这个的意思是就是将k8s配置到环境变量中,在那个目录都可以任使用k8s命令,也可将此文件考备到其他节点,在子节点上也可执行集群的命令了mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config#这个要记好,子节点加入主节点需要执行的命令,将下边的命令在node-1,node-2中执行,就可以将 node-1,和 node-2加入集群中kubeadm join 10.8.51.76:6443 --token tncyyh.jycputhrslcs6f6d --discovery-token-ca-cert-hash sha256:099ebf2e5b7d07f35e**********fb7b20cdf923**********9fa70734f6acc73a48

查看集群状态

kubectl get csNAME                 STATUS    MESSAGE              ERRORscheduler            Healthy   ok                   controller-manager   Healthy   ok                   etcd-0               Healthy   {"health": "true"}

安装网络插件 flannel

#只要server端安装即可wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubectl apply -f  kube-flannel.ymlclusterrole.rbac.authorization.k8s.io "flannel" createdclusterrolebinding.rbac.authorization.k8s.io "flannel" createdserviceaccount "flannel" createdconfigmap "kube-flannel-cfg" createddaemonset.extensions "kube-flannel-ds" created

安装完成后,可使用kubectl get pod --all-namespaces 查看

kubectl get pod --all-namespacesNAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGEkube-system   etcd-server                             1/1       Running   0          4hkube-system   heapster-676cc864c6-g4jfj               1/1       Running   0          4hkube-system   kube-apiserver-server                   1/1       Running   0          4hkube-system   kube-controller-manager-server          1/1       Running   0          4hkube-system   kube-dns-86f4d74b45-pm8z2               3/3       Running   0          4hkube-system   kube-flannel-ds-amd64-6xlzz             1/1       Running   0          4hkube-system   kube-flannel-ds-amd64-78clr             1/1       Running   0          4hkube-system   kube-flannel-ds-amd64-qgjp2             1/1       Running   0          3hkube-system   kube-proxy-5pqsw                        1/1       Running   0          4hkube-system   kube-proxy-85m2p                        1/1       Running   0          3hkube-system   kube-proxy-zgns8                        1/1       Running   0          4hkube-system   kube-scheduler-server                   1/1       Running   0          4hkube-system   kubernetes-dashboard-7d5dcdb6d9-bv8l2   1/1       Running   0          3hkube-system   monitoring-grafana-69df66f668-ndcwk     1/1       Running   0          4hkube-system   monitoring-influxdb-78d4c6f5b6-pgb89    1/1       Running   0          4h

 让server 参与负载

kubectl taint nodes server node-role.kubernetes.io/master-

 向集群中加入 node

#这个是初始化后显示出来的kubeadm join 10.8.51.76:6443 --token tncyyh.jycputhrslcs6f6d --discovery-token-ca-cert-hash sha256:099ebf2e5b7d07f35e3ace5809f********3c2f758ab9f*******73a48

查看集群节点

kubectl get nodesNAME      STATUS    ROLES     AGE       VERSIONnode-1    Ready     <none>    4h        v1.10.0node-2    Ready     <none>    3h        v1.10.0server    Ready     master    4h        v1.10.0

--命令自动补全

source <(kubectl completion bash)

echo "source <(kubectl completion bash)" >> ~/.bashrc

查看api服务

#浏览器执行https://10.8.51.76:6443

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

这是没受限了,此时可以配置一个代理,使用非https访问即可

nohup kubectl proxy --port=8081 --address=10.8.51.76 --accept-hosts=^*$ &
#浏览器执行http://10.8.51.76:8081

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

妥了..要是能坚持 到这里,就说明k8s集群,已经搭建成功了.下边内容可以选看了

安装Dashboard插件

#下载kubernetes配置文件wget https://raw.githubusercontent.com/kubernetes/dashboard/master/class="lazy" data-src/deploy/recommended/kubernetes-dashboard.yaml#编辑kubernetes-dashboard.yaml 文件,指定端口

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

由于 K8S在1.6版本以后kube-apiserver 启用了 RBAC 授权,而官方源码目录的 dashboard-controller.yaml 没有定义授权的 ServiceAccount,所以后续访问 API server 的 API 时会被拒绝

创建一个kubernetes-dashboard-admin的ServiceAccount并授予集群admin的权限,创建kubernetes-dashboard-admin.rbac.yaml

---apiVersion: v1kind: ServiceAccountmetadata:  labels:    k8s-app: kubernetes-dashboard  name: kubernetes-dashboard-admin  namespace: kube-system---apiVersion: rbac.authorization.k8s.io/v1beta1kind: ClusterRoleBindingmetadata:  name: kubernetes-dashboard-admin  labels:    k8s-app: kubernetes-dashboardroleRef:  apiGroup: rbac.authorization.k8s.io  kind: ClusterRole  name: cluster-adminsubjects:- kind: ServiceAccount  name: kubernetes-dashboard-admin  namespace: kube-system
#执行命令kubectl create -f kubernetes-dashboard.yamlkubectl create -f kubernetes-dashboard-admin.rbac.yaml

安装heapster插件

mkdir heapsterwget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/grafana.yamlwget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/rbac/heapster-rbac.yamlwget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/heapster.yamlwget https://raw.githubusercontent.com/kubernetes/heapster/master/deploy/kube-config/influxdb/influxdb.yaml#查看以上下载配置谁的中的镜像版本是否与下载时的一致,不一致时修改成本地镜像版本kubectl create -f ./

查看token

kubectl get secret -n kube-system | grep dashboard-adminkubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-4lk94

访问dashboard

#浏览器输入,这个30000端是我们刚才自己指定的https://10.8.51.76:30000

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

此处选择令牌输入刚才查看的token,点击登录

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

好了.这回是完事了.

要是你的浏览器不能访问https,可参考,我用的浏览器chrmoe 各种方式都试了,都不行,最后使用下边连接的方式成功了.可以看到了.

Dashboard使用自定义证书 

https://blog.csdn.net/chenleiking/article/details/81488028

本文参考综合了网上的一些成功案例.

参考来源:

https://www.jianshu.com/p/42772740f09a

https://www.kubernetes.org.cn/3808.html

JAVA版API使用

我用的这个,实现了通过ymal文件对pod的增、删、改、查等一些基本操作

https://github.com/fabric8io/kubernetes-client

YMAL格式说明

####################################################################apiVersion: v1            //版本kind: pod                 //类型,podmetadata:                 //元数据  name: String            //元数据,pod的名字  namespace: String       //元数据,pod的命名空间  labels:                 //元数据,标签列表    - name: String        //元数据,标签的名字  annotations:            //元数据,自定义注解列表    - name: String        //元数据,自定义注解名字spec:                     //pod中容器的详细定义  containers:             //pod中的容器列表,可以有多个容器  - name: String          //容器的名称    image: String         //容器中的镜像    imagesPullPolicy: [Always|Never|IfNotPresent]//获取镜像的策略,默认值为Always,每次都尝试重新下载镜像    command: [String]     //容器的启动命令列表(不配置的话使用镜像内部的命令)    args: [String]        //启动参数列表    workingDir: String    //容器的工作目录    volumeMounts:         //挂载到到容器内部的存储卷设置    - name: String      mountPath: String   //存储卷在容器内部Mount的绝对路径      readOnly: boolean   //默认值为读写    ports:                //容器需要暴露的端口号列表    - name: String      containerPort: int  //容器要暴露的端口      hostPort: int       //容器所在主机监听的端口(容器暴露端口映射到宿主机的端口,设置hostPort时同一台宿主机将不能再启动该容器的第2份副本)      protocol: String    //TCP和UDP,默认值为TCP    env:                  //容器运行前要设置的环境列表    - name: String      value: String    resources:                  limits:             //资源限制,容器的最大可用资源数量        cpu: Srting        memory: String      requeste:           //资源限制,容器启动的初始可用资源数量        cpu: String        memory: String    livenessProbe:         //pod内容器健康检查的设置      exec:        command: [String]  //exec方式需要指定的命令或脚本      httpGet:             //通过httpget检查健康        path: String        port: number        host: String        scheme: Srtring        httpHeaders:        - name: Stirng          value: String      tcpSocket:           //通过tcpSocket检查健康        port: number      initialDelaySeconds: 0//首次检查时间      timeoutSeconds: 0     //检查超时时间      periodSeconds: 0      //检查间隔时间      successThreshold: 0      failureThreshold: 0      securityContext:      //安全配置        privileged: falae    restartPolicy: [Always|Never|OnFailure]//重启策略,默认值为Always    nodeSelector: object    //节点选择,表示将该Pod调度到包含这些label的Node上,以key:value格式指定    imagePullSecrets:    - name: String    hostNetwork: false      //是否使用主机网络模式,弃用Docker网桥,默认否  volumes:                  //在该pod上定义共享存储卷列表  - name: String    emptyDir: {}            //是一种与Pod同生命周期的存储卷,是一个临时目录,内容为空    hostPath:               //Pod所在主机上的目录,将被用于容器中mount的目录      path: string    secret:                 //类型为secret的存储卷      secretName: String      item:      - key: String        path: String    configMap:             //类型为configMap的存储卷      name: String      items:      - key: String        path: String

kubernetes目录挂载

Docker本身有自己的目录挂载, 但功能太单一, 一般也只能挂载本地目录, K8S作为Docker容器的管理服务, 除了能够挂载本地的还能在线文件存储目录, 比如说nfs

本地目录挂载

yml文件中配置如下

apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: goserverspec:  replicas: 2  template:    metadata:      labels:        run: goserver    spec:      containers:      - name: goserver        image: registry.cn-hangzhou.aliyuncs.com/magina-centos7/goserver:1.0        ports:        - containerPort: 4040        volumeMounts:        - mountPath: /mnt/logs          name: go-logs      volumes:      - name: go-logs        hostPath:          path: /mnt/logs/kubernetes/goserver

最后的volumes指定挂载目录的名称和路径, 这个目录是本地的, 也就是说pod只会挂载当前宿主机的目录, 但当我们有多个节点, 而这些节点上又有运行着相同的项目, 而我们需要收集这些项目的日志, 用本地挂载的方式显得很麻烦, 当然, 我们可以用分布式日志工具去处理, 这里介绍另外一种方式, 网络文件系统nfs

网络文件系统nfs

yml文件中配置如下

apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: goserverspec:  replicas: 2  template:    metadata:      labels:        run: goserver    spec:      containers:      - name: goserver        image: registry.cn-hangzhou.aliyuncs.com/magina-centos7/goserver:1.0        ports:        - containerPort: 4040        volumeMounts:        - mountPath: /mnt/logs          name: go-logs  volumes:  - name: go-log    nfs:      server: nfs4.yinnote.com      path: /prod/logs/goserver

这里使用了nfs标签, 也就是将当前目录挂载到了远程文件系统, 这里的server指的是远程文件系统路径, 需要自己去配置, 或者直接买其他云服务厂商的文件系统, 这样做的好处是, 不管哪个节点, 哪个pod, 都可以将日志打到统一的地方

另外, 如果我们使用了nfs文件系统, 必须要在每台节点上面安装nfs-utils工具包, 否则pod会无法启动

yum install nfs-utils

导入导出镜像容 器

pull不下来镜像。

可以通过 docker 提供把镜像导出export(保存save)为文件的机制,这样就可以把镜像copy到任意地方了。

导出 export - 导入 import

格式:docker export CONTAINER(容器)

使用 docker ps -a 查看本机已有的容器,如:

[root@docker1 LAMP]# docker ps -aCONTAINER ID    IMAGE     COMMAND    CREATED     STATUS      PORTS                          NAMESdd43b6de6b33 weblogic:jdk1.6 "/run.sh" 3 days ago   Up 3 days  0.0.0.0:32771->22/tcp, 0.0.0.0:32770->7001/tcp   peaceful_sahaaca388afeddf sshd:centos   "/run.sh" 4 days ago    Up 4 days  0.0.0.0:32769->22/tcp                   grave_turing......[root@docker1 LAMP]# docker export dd43b6de6b33 >/home/weblogic:jdk1.6.tar[root@docker1 LAMP]# cd /home[root@docker1 home]# lsweblogic:jdk1.6.tar

导出完成后,就可以使用 import 导入了

[root@docker1 home]# docker import - /home/weblogic:jdk1.6.tar

保存save - 加载 load

格式:docker save IMAGE(镜像)

使用 docker images 查看本机已有的镜像(也可以使用 docker commit <CONTAIN-ID> <IMAGE-NAME>命令把一个正在运行的容器保存为镜像),如:

[root@docker1 LAMP]# docker imagesREPOSITORY             TAG                 IMAGE ID            CREATED             SIZE......docker.io/tutum/lamp      latest              3d49e175ec00        22 months ago       426.9 MB......[root@docker1 LAMP]# docker save 3d49e175ec00 >lamp.tar[root@docker1 LAMP]# lsDockerfile  lamp.tar[root@docker1 LAMP]# sz lamp.tar rzStarting zmodem transfer.  Press Ctrl+C to cancel.Transferring lamp.tar...  100%  430366 KB    14345 KB/sec    00:00:30       0 Errors

有点慢,稍微等待一下,没有任何warn信息就表示保存OK。3d49e175ec00 是镜像ID

现在就可以在任何装 docker 的地方加载 刚保存的镜像了

[root@docker1 home]# docker load < /lamp/lamp.tar

导出 export 与 保存 save 的区别

 (1).export导出的镜像文件大小  小于 save保存的镜像

 (2).export 导出(import导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史,所以无法进行回滚操作(docker tag <LAYER ID> <IMAGE NAME>);而save保存(load加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。(查看方式:docker images --tree)

注:导入加载进来觉得不合适可以使用 docker rm 容器ID 、 docker rmi 镜像ID 来删掉。

移除所有的容器和镜像(大扫除):

代码如下:

docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)

上述内容就是k8s Kubernetes v1.10.0 集群安装以及踩坑过程,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

k8s Kubernetes v1.10.0 集群安装以及踩坑过程

本篇文章为大家展示了k8s Kubernetes v1.10.0 集群安装以及踩坑过程,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。因工作需求,最近开始研究docker及k8s相关的资料,本文主要记
2023-06-19

Centos7安装部署Kubernetes(k8s)集群实现过程

这篇文章主要为大家介绍了Centos7安装部署Kubernetes(k8s)集群实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

如何安装minikube,kubectl以及实现Kubernetes集群部署

这篇文章给大家介绍如何安装minikube,kubectl以及实现Kubernetes集群部署,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。(1) 安装kubectlcurl -LO https://storage.g
2023-06-19

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录