[关闭]
@zhangyy 2020-04-26T05:57:47.000000Z 字数 14722 阅读 581

Kubernetes 的概念与安装配置补充

kubernetes系列


  • 一:kubernetes的介绍
  • 二:kubernetes的安装配置
  • 三:kubernetes 的 WEB UI

一:kubernetes的介绍

1.1、Kubernetes是什么

  1. Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。
  2. K8S用于容器化应用程序的部署,扩展和管理。
  3. K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。
  4. Kubernetes目标是让部署容器化应用简单高效。
  5. 官方网站:http://www.kubernetes.io

1.2、Kubernetes特性

  1. 1、自我修复
  2. 在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
  3. 2、 弹性伸缩
  4. 使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。 自动部署和回滚
  5. K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务。
  6. 3、服务发现和负载均衡
  7. K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。
  8. 4、 机密和配置管理
  9. 管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。
  10. 5、存储编排
  11. 挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、GlusterFS、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。
  12. 6、 批处理
  13. 提供一次性任务,定时任务;满足批量数据处理和分析的场景。

1.3 Kubernetes集群架构与组件

1.png-255.3kB

image_1dimpj9kn155d15bh12v2ll731ul.png-153.9kB

  1. Master组件
  2. kube-apiserverKubernetes API,
  3. 集群的统一入口,各组件协调者,以RESTful API提供接口服务,所有对象资源的增删改查和监听操作都交给APIServer处理后再提交给Etcd存储。
  4. kube-controller-manager处理集群中常规后台任务,一个资源对应一个控制器,而ControllerManager就是负责管理这些控制器的。
  5. kube-scheduler根据调度算法为新创建的Pod选择一个Node节点,可以任意部署,可以部署在同一个节点上,也可以部署在不同的节点上。
  6. etcd分布式键值存储系统。用于保存集群状态数据,比如Pod、Service等对象信息。
  7. Node组件
  8. kubelet kubelet是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器、Pod挂载数据卷、下载secret、获取容器和节点状态等工作。kubelet将每个Pod转换成一组容器。
  9. kube-proxy
  10. 在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。
  11. docker或rocket容器引擎,运行容器。

image_1dimq981i10ku1c5l1lh21hd61kla12.png-905.9kB

image_1dimr3jkr1j3q14lu102i1vg81g9a1f.png-188.6kB

image_1dp53hak6bs3nvj1ebr1ddd14as9.png-442.7kB

  1. 1. Pod•
  2. 最小部署单元
  3. • 一组容器的集合
  4. • 一个Pod中的容器共享网络命名空间
  5. • Pod是短暂的
  6. 2. Controllers
  7. • ReplicaSet : 确保预期的Pod副本数量
  8. • Deployment : 无状态应用部署
  9. • StatefulSet : 有状态应用部署
  10. • DaemonSet : 确保所有Node运行同一个Pod
  11. • Job : 一次性任务
  12. • Cronjob : 定时任务更高级层次对象,部署和管理Pod
  13. 3. Service
  14. • 防止Pod失联
  15. • 定义一组Pod的访问策略
  16. 4. Label : 标签,附加到某个资源上,用于关联对象、查询和筛选
  17. 5. Namespaces : 命名空间,将对象逻辑上隔离
  18. 6. Annotations :注释

二: kubernetes 高可用集群环境部署

2.1 官方提供的三种部署方式

  1. 1. minikube
  2. Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,仅用于尝试Kubernetes或日常开发的用户使用。部署地址:https://kubernetes.io/docs/setup/minikube/
  3. 2. kubeadm
  4. Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。部署地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
  5. 3.二进制包推荐,从官方下载发行版的二进制包,手动部署每个组件,组成Kubernetes集群。下载地址:https://github.com/kubernetes/kubernetes/releases

2.2 采用二进制包部署

2.2.1 软件与版本

image_1dimt7dur18vr10pv1j1e1eidkq11s.png-23.8kB

2.2.2 IP地址 与角色规划

image_1dimtqhsirno1f7hd0lko11vm129.png-146.2kB

2.2.3 单节点master

image_1dimu8jak1h8t278ufb19rc1o2v36.png-207.1kB

2.2.4 多节点master

image_1dimuauhj17nuc0n7t0ovr184c3j.png-259.5kB

2.3 首先部署单master节点

2.3.1 自签SSL证书

image_1dimuf66hlcoo2l40kc1ish40.png-106.3kB

  1. mkdir /k8s/{k8s-cert,etcd-cert} -p
  2. cd /Deploy
  3. cp -p etcd-cert.sh /k8s/etcd-cert
  4. cd /k8s/etcd-cert
  5. chmod +x etcd-cert.sh
  6. ----
  7. etcd-cert.sh 脚本内容
  8. cat > ca-config.json <<EOF
  9. {
  10. "signing": {
  11. "default": {
  12. "expiry": "87600h"
  13. },
  14. "profiles": {
  15. "www": {
  16. "expiry": "87600h",
  17. "usages": [
  18. "signing",
  19. "key encipherment",
  20. "server auth",
  21. "client auth"
  22. ]
  23. }
  24. }
  25. }
  26. }
  27. EOF
  28. cat > ca-csr.json <<EOF
  29. {
  30. "CN": "etcd CA",
  31. "key": {
  32. "algo": "rsa",
  33. "size": 2048
  34. },
  35. "names": [
  36. {
  37. "C": "CN",
  38. "L": "Beijing",
  39. "ST": "Beijing"
  40. }
  41. ]
  42. }
  43. EOF
  44. cfssl gencert -initca ca-csr.json | cfssljson -bare ca -
  45. #-----------------------
  46. cat > server-csr.json <<EOF
  47. {
  48. "CN": "etcd",
  49. "hosts": [
  50. "192.168.100.11",
  51. "192.168.100.12",
  52. "192.168.100.13",
  53. "192.168.100.14",
  54. "192.168.100.15",
  55. "192.168.100.16",
  56. "192.168.100.17",
  57. "192.168.100.18",
  58. "192.168.100.60"
  59. ],
  60. "key": {
  61. "algo": "rsa",
  62. "size": 2048
  63. },
  64. "names": [
  65. {
  66. "C": "CN",
  67. "L": "BeiJing",
  68. "ST": "BeiJing"
  69. }
  70. ]
  71. }
  72. EOF
  73. cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=www server-csr.json | cfssljson -bare server
  74. ----

image_1dimvlfmv11fh10gjeo3k8j6365d.png-460kB

  1. cfsssl 命令支持
  2. cd /root/Deploy
  3. cp -p cfssl.sh /k8s/etcd-cert
  4. cd /k8s/etcd-cert
  5. chmod +x cfssl.sh
  6. ./cfssl.sh
  7. ./etcd-cert.sh
  8. ----
  9. cfssl.sh 脚本内容
  10. curl -L https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 -o /usr/local/bin/cfssl
  11. curl -L https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 -o /usr/local/bin/cfssljson
  12. curl -L https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 -o /usr/local/bin/cfssl-certinfo
  13. chmod +x /usr/local/bin/cfssl /usr/local/bin/cfssljson /usr/local/bin/cfssl-certinfo
  14. ----

image_1din02ksu8u31e5efo8u1v1tj85q.png-457.5kB

image_1din0539jnpt1qmm1j4k1pl1lrm67.png-213.4kB

image_1din0o9681nea1uoc1akq1bpsa9571.png-626.9kB

2.3.2 配置etcd 服务

  1. 二进制包下载地址
  2. https://github.com/etcd-io/etcd/releases
  1. cd /root/Soft
  2. tar -zxvf tar -zxvf etcd-v3.3.10-linux-amd64.tar.gz
  3. cd cd etcd-v3.3.10-linux-amd64/
  4. mkdir -p /opt/etcd/{ssl,bin,cfg}
  5. mv etcd etcdctl /opt/etcd/bin/
  6. cd /k8s/etcd-cert
  7. cp -p *.pem /opt/etcd/ssl
  8. cp -p *.csr /opt/etcd/ssl

image_1din13lctdevd5b1e5pij91off7u.png-169kB

image_1din1449l1gb6lem1ocmk3v13l18b.png-427.5kB

image_1din1bejefhkp5911tr140a30h98.png-410.5kB

image_1din20esf1pm71mkd1dgj1ai916f29l.png-107.9kB

  1. cd /root/Deploy
  2. cp -p etcd.sh /root
  3. chmod +x etcd.sh
  4. ./etcd.sh etcd01 192.168.100.11 etcd02=https://192.168.100.13:2380,etcd03=https://192.168.100.14:2380
  5. scp -r /opt/etcd 192.168.100.13:/opt/
  6. scp -r /opt/etcd 192.168.100.14:/opt/
  7. scp /usr/lib/systemd/system/etcd.service root@192.168.100.13:/usr/lib/systemd/system/
  8. scp /usr/lib/systemd/system/etcd.service root@192.168.100.14:/usr/lib/systemd/system/
  9. ----
  10. etcd.sh 脚本内容
  11. #!/bin/bash
  12. # example: ./etcd.sh etcd01 192.168.100.11 etcd02=https://192.168.100.13:2380,etcd03=https://192.168.100.14:2380
  13. ETCD_NAME=$1
  14. ETCD_IP=$2
  15. ETCD_CLUSTER=$3
  16. WORK_DIR=/opt/etcd
  17. cat <<EOF >$WORK_DIR/cfg/etcd
  18. #[Member]
  19. ETCD_NAME="${ETCD_NAME}"
  20. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  21. ETCD_LISTEN_PEER_URLS="https://${ETCD_IP}:2380"
  22. ETCD_LISTEN_CLIENT_URLS="https://${ETCD_IP}:2379"
  23. #[Clustering]
  24. ETCD_INITIAL_ADVERTISE_PEER_URLS="https://${ETCD_IP}:2380"
  25. ETCD_ADVERTISE_CLIENT_URLS="https://${ETCD_IP}:2379"
  26. ETCD_INITIAL_CLUSTER="etcd01=https://${ETCD_IP}:2380,${ETCD_CLUSTER}"
  27. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  28. ETCD_INITIAL_CLUSTER_STATE="new"
  29. EOF
  30. cat <<EOF >/usr/lib/systemd/system/etcd.service
  31. [Unit]
  32. Description=Etcd Server
  33. After=network.target
  34. After=network-online.target
  35. Wants=network-online.target
  36. [Service]
  37. Type=notify
  38. EnvironmentFile=${WORK_DIR}/cfg/etcd
  39. ExecStart=${WORK_DIR}/bin/etcd \
  40. --name=\${ETCD_NAME} \
  41. --data-dir=\${ETCD_DATA_DIR} \
  42. --listen-peer-urls=\${ETCD_LISTEN_PEER_URLS} \
  43. --listen-client-urls=\${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \
  44. --advertise-client-urls=\${ETCD_ADVERTISE_CLIENT_URLS} \
  45. --initial-advertise-peer-urls=\${ETCD_INITIAL_ADVERTISE_PEER_URLS} \
  46. --initial-cluster=\${ETCD_INITIAL_CLUSTER} \
  47. --initial-cluster-token=\${ETCD_INITIAL_CLUSTER_TOKEN} \
  48. --initial-cluster-state=new \
  49. --cert-file=${WORK_DIR}/ssl/server.pem \
  50. --key-file=${WORK_DIR}/ssl/server-key.pem \
  51. --peer-cert-file=${WORK_DIR}/ssl/server.pem \
  52. --peer-key-file=${WORK_DIR}/ssl/server-key.pem \
  53. --trusted-ca-file=${WORK_DIR}/ssl/ca.pem \
  54. --peer-trusted-ca-file=${WORK_DIR}/ssl/ca.pem
  55. Restart=on-failure
  56. LimitNOFILE=65536
  57. [Install]
  58. WantedBy=multi-user.target
  59. EOF
  60. systemctl daemon-reload
  61. systemctl enable etcd
  62. systemctl restart etcd
  63. ----

image_1din2gsk418l1r2f15otg5g59jai.png-353.4kB

image_1din2hhja1opvivl9hp5r4rrsav.png-544.7kB

  1. login :
  2. 192.168.100.11 etcd 的文件
  3. vim /opt/etcd/cfg/etcd
  4. ---
  5. #[Member]
  6. ETCD_NAME="etcd01"
  7. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  8. ETCD_LISTEN_PEER_URLS="https://192.168.100.11:2380"
  9. ETCD_LISTEN_CLIENT_URLS="https://192.168.100.11:2379"
  10. #[Clustering]
  11. ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.100.11:2380"
  12. ETCD_ADVERTISE_CLIENT_URLS="https://192.168.100.11:2379"
  13. ETCD_INITIAL_CLUSTER="etcd01=https://192.168.100.11:2380,etcd02=https://192.168.100.13:2380,etcd03=https://192.168.100.14:2380"
  14. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  15. ETCD_INITIAL_CLUSTER_STATE="new"
  16. ~
  17. ---
  18. login :
  19. 192.168.100.13 etcd 文件内容
  20. vim /opt/etcd/cfg/etcd
  21. ---
  22. #[Member]
  23. ETCD_NAME="etcd02"
  24. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  25. ETCD_LISTEN_PEER_URLS="https://192.168.100.13:2380"
  26. ETCD_LISTEN_CLIENT_URLS="https://192.168.100.13:2379"
  27. #[Clustering]
  28. ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.100.13:2380"
  29. ETCD_ADVERTISE_CLIENT_URLS="https://192.168.100.13:2379"
  30. ETCD_INITIAL_CLUSTER="etcd01=https://192.168.100.11:2380,etcd02=https://192.168.100.13:2380,etcd03=https://192.168.100.14:2380"
  31. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  32. ETCD_INITIAL_CLUSTER_STATE="new"
  33. ----
  34. login :
  35. 192.168.100.14 etcd 文件内容
  36. vim /opt/etcd/cfg/etcd
  37. ----
  38. #[Member]
  39. ETCD_NAME="etcd03"
  40. ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
  41. ETCD_LISTEN_PEER_URLS="https://192.168.100.14:2380"
  42. ETCD_LISTEN_CLIENT_URLS="https://192.168.100.14:2379"
  43. #[Clustering]
  44. ETCD_INITIAL_ADVERTISE_PEER_URLS="https://192.168.100.14:2380"
  45. ETCD_ADVERTISE_CLIENT_URLS="https://192.168.100.14:2379"
  46. ETCD_INITIAL_CLUSTER="etcd01=https://192.168.100.11:2380,etcd02=https://192.168.100.13:2380,etcd03=https://192.168.100.14:2380"
  47. ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
  48. ETCD_INITIAL_CLUSTER_STATE="new"
  49. ----
  1. 启动 etcd 服务
  2. service etcd start
  3. chkconfig etcd on

image_1din2v62eues14046pu1k221li7bc.png-347.3kB

image_1din30i9mn7afcf19o2nub1m9bcp.png-315kB

image_1din312rf1v2d1hab13d2192g1pu4d6.png-266kB

  1. 验证 etcd集群
  2. cd /opt/etcd/ssl
  3. /opt/etcd/bin/etcdctl \
  4. --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem \
  5. --endpoints="https://192.168.100.11:2379,https://192.168.100.13:2379,https://192.168.100.14:2379" \
  6. cluster-health

image_1din38k4k1nn811jc1jh81s4os3keg.png-223.2kB

image_1din39gromb71r0j9g1osi1urset.png-242.5kB

image_1din3743d1ecm4s41be66n01v0edj.png-316.6kB

2.4 Node安装Docker

image_1din3g00bicf1e00ql910tasmhfa.png-198.8kB

  1. 在 node节点 安装docker
  2. 192.168.100.13 192.168.100.14
  3. ----
  4. yum install -y yum-utils device-mapper-persistent-data lvm2
  5. # yum-config-manager \
  6. --add-repo \
  7. https://download.docker.com/linux/centos/docker-ce.repo
  8. docker 加速器
  9. curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://abcd1234.m.daocloud.io
  10. # yum install docker-ce
  11. # systemctl start docker
  12. # systemctl enable docker
  13. ---

image_1din4jab5611t4k1n589lg1v2kgh.png-483.5kB

image_1din4k37s17gqr14unmvf117ggu.png-208.8kB

image_1din4khsko7912jqfc3pj28bmhb.png-348.7kB

image_1din4l0n91j547r91cuo19f1h4lho.png-340.6kB

image_1din4e954chg1cmk1n7661oqpfn.png-945.9kB

image_1din4f98v1oks11f47ig2pm17cbg4.png-914.8kB

2.5 部署flannel 网络 模型

2.5.1 kubernetes 网络模型(CNI)

  1. Container Network Interface(CNI): 容器网络接口,Google 和 cCoreOS 主导
  2. Kubernetes 网络模型设计要求:
  3. 1. 一个pod 一个IP
  4. 2. 每个pod 独立IP,pod 内所有容器共享网络(同一个IP)
  5. 3. 所有容器都可以与所有其他容器通信
  6. 4. 所有节点都可以与所有容器通信

image_1din5hn8v1lvk1qjm114bdhq14ugi5.png-418.9kB

image_1din7apbid9i1gg549mnklpm1j5.png-538kB

2.5.2 flannel的 网络模型

  1. Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来。
  2. VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头进行封装,然后在以太网上传输,到达目的地后由隧道端点解封装并将数据发送给目
  3. 标地址。
  4. Flannel:是Overlay网络的一种,也是将源数据包封装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VXLAN、AWS VPC和GCE路由等数据转发方
  5. 式。

image_1din7ojqr1po12ji1sb51gv9r7kji.png-94.6kB

image_1dip4je05rg313va1s6f107mdj219.png-303.4kB

2.5.3 flannel 安装 与配置

  1. 1. 写入分配的子网段到etcd,供flanneld使用
  2. cd /opt/etcd/ssl/
  3. /opt/etcd/bin/etcdctl \
  4. --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem \
  5. --endpoints="https://192.168.100.11:2379,https://192.168.100.13:2379,https://192.168.100.14:2379" \
  6. set /coreos.com/network/config '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'

image_1dipbmq451peav151d8ta8b1lkd26.png-199.5kB

  1. 2. 下载flannel 软件
  2. https://github.com/coreos/flannel/releases
  3. tar -zxvf flannel-v0.10.0-linux-amd64.tar.gz
  4. mv flanneld /opt/kubernetes/bin/
  5. mv mk-docker-opts.sh /opt/kubernetes/bin/

image_1dipcv3p8hksg60pfd1at6gau33.png-345.9kB

  1. 在node节点 上 部署flannel
  2. mkdir /opt/kubernetes/{bin,cfg,ssl} -p
  3. cd /root/
  4. ./flannel.sh https://192.168.100.11:2379,https://192.168.100.13:2379,https://192.168.100.14:2379

image_1dipd66vv1pbd1kv8ps1glmva53.png-206.2kB

  1. 启动 flannel 与 docker
  2. service flanneld restart
  3. service docker restart

image_1dipdk82177s15b51lqu1bfbe1q5g.png-171.9kB

image_1dipdl89i13ch1t0tfumd8t1kg65t.png-765.6kB

image_1dipeu8su1gkuch81clq1v151rbu8a.png-244.1kB

2.png-206.5kB

  1. flannel 网络的测试
  2. 在192.168.100.13 与 192.168.10.14 上面 创建 临时容器 查看 是不是可以ping 通
  3. 安装测试容器
  4. docker run ti bubsybox
  5. docker run ti busybox

image_1dipg02vv1stdnqh19261l2ct26b3.png-326.7kB

3.png-456kB

image_1dipg5mkogtl84l1k56mln113ncb.png-291.7kB

image_1dipg6sns1bm1kqi109adhfhdqco.png-185.4kB


  1. 查看路由
  2. /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.100.11:2379,https://192.168.100.13:2379,https://192.168.100.14:2379" ls /coreos.com/network/
  3. /opt/etcd/bin/etcdctl --ca-file=ca.pem --cert-file=server.pem --key-file=server-key.pem --endpoints="https://192.168.100.11:2379,https://192.168.100.13:2379,https://192.168.100.14:2379" ls /coreos.com/network/subnets

image_1dipgr40o1259mpd1pqs1s8a1l2vd5.png-145.4kB

image_1dipgrlmu1u2e12f6q94ar8cstdi.png-189.5kB

2.6 部署k8s 的 Master 部分

2.6.1 下载kubernetes

  1. 下载地址:
  2. 选择 1.13.4 版本
  3. https://dl.k8s.io/v1.13.4/kubernetes-server-linux-amd64.tar.gz

2.6.2 部署kube-apiserver

  1. tar -zxvf kubernetes-server-linux-amd64.tar.gz
  2. mkdir -p /opt/kubernetes/{bin,cfg,ssl}
  3. cd /root/kubernetes/server/bin
  4. cp -p kube-apiserver kube-controller-manager kube-scheduler /opt/kubernetes/bin/
  5. cd /root/Deploy
  6. chmod +x apiserver.sh
  7. ./apiserver.sh 192.168.100.11 https://192.168.100.11:2379,https://192.168.100.13:2379,https://192.168.100.14:2379

image_1diphnpahvf01jeo1quu133i32den.png-371.8kB

image_1diphoan276fopq11mpokae35fa.png-470.4kB

image_1dipiacdp1tog1r9jq2f1st262efn.png-162.9kB

image_1dipihpa911hbubn1o0aq141l8qgk.png-154.1kB

  1. 配置k8s 的认证
  2. cd /root/Deploy
  3. cp -p k8s-cert.sh /opt/kubernetes/ssl
  4. cd /opt/kubernetes/ssl
  5. chmod +x k8s-cert.sh
  6. ./k8s-cert.sh

image_1dipiv1bia451kn513fok831i2ph1.png-324kB

  1. 生成token 文件
  2. export BOOTSTRAP_TOKEN=$(head -c 16 /dev/urandom | od -An -t x | tr -d ' ')
  3. cat > token.csv <<EOF
  4. ${BOOTSTRAP_TOKEN},kubelet-bootstrap,10001,"system:kubelet-bootstrap"
  5. EOF
  6. cat token.csv
  7. mv tokcen.csv /opt/kubernetes/cfg/

image_1dipjbqao1o0vgrq160kacm32bie.png-398.5kB

image_1dipjfkan6l34qa1390q8d7mnjb.png-417.6kB

  1. 重启动 kube-apiserver
  2. service kube-apiserver restart
  3. netstat -nultp |grep 8080
  4. netstat -nultp |grep 6443
  5. apiserver 问题排查命令
  6. /opt/kubernetes/bin/kube-apiserver $KUBE_APISERVER_OPTS

image_1dipjqno31m1e1jhj1hr21tq33giko.png-580.1kB

2.6.3 部署controller-manager 与 scheduler

  1. cd /root/Deploy
  2. chmod +x controller-manager.sh
  3. chmod +x scheduler.sh
  4. ./conroller-manager.sh 127.0.0.1
  5. ./scheduler.sh 127.0.0.1

image_1dipk7m5d19at1k681mer1vfnb3vl5.png-468kB

image_1dipk971b1hcj124s1lug1r3ufali.png-372.2kB

  1. 检查集群 的状态
  2. cd /root/kubernetes/server/bin/
  3. cp -p kubectl /usr/bin/
  4. kubectl get cs

image_1dipkg7fo1shjkii3eu1g0ah0slv.png-337.3kB

  1. 部署Node组件 所需要的授权

image_1dipkjeht1t9lbvp1tjj1ao9vgpmc.png-162.7kB

  1. kubectl create clusterrolebinding kubelet-bootstrap \
  2. --clusterrole=system:node-bootstrapper \
  3. --user=kubelet-bootstrap

image_1dipkmbcflckj8h1mmot3ham3nc.png-138.1kB

  1. cd /root/Deploy
  2. cp -p kubeconfig.sh /root
  3. cd /root
  4. chmod +x kubeconfig.sh
  5. ./kubeconfig.sh 192.168.100.11 /opt/kubernetes/ssl
  6. 生成bootstrap.kubeconfig 与 kube-proxy.kubeconfig 文件

image_1dipl8u491c1dmhe111rkkm1qq2o9.png-369.9kB

image_1diplaasn1a39h64kkc6c1kh3p6.png-429.4kB


  1. 查看证书颁发
  2. kubectl get csr

image_1dipmq1663k61ufh15fq4hf1krku3.png-183.8kB

  1. kubectl certificate approve node-csr-H38P-yvXaCa5GO7nXNg_2zegNT1BuSr-wCBzBXOPXBc
  2. kubectl certificate approve node-csr-kAJTeC6Biz8ZtNsbFCSoL8AF-DhAFBlocn8xDxzTr1s
  3. kubectl get csr
  4. kubectl get node

image_1dipn07cu3bf88mfp613rd1hl3ug.png-659.5kB

image_1dipn1jrlb4eb501u8115p2108tut.png-141.4kB

2.7 部署k8s的node部分组件

  1. 复制 bootstrap.kubeconfig 与 kube-proxy.kubeconfig 文件到node 上面
  2. scp bootstrap.kubeconfig kube-proxy.kubeconfig 192.168.100.13:/opt/kubernetes/cfg/
  3. scp bootstrap.kubeconfig kube-proxy.kubeconfig 192.168.100.14:/opt/kubernetes/cfg/
  4. cp -p bootstrap.kubeconfig kube-proxy.kubeconfig /opt/kubernetes/cfg/
  5. cd /root/kubernetes/server/bin
  6. scp kubelet root@192.168.100.13:/opt/kubernetes/bin/
  7. scp kubelet root@192.168.100.14:/opt/kubernetes/bin/

image_1dipllvvf1ou81q7l172u93quevq3.png-305.8kB

image_1dipm2615nq1fjji1rntvsfhqg.png-385.4kB

  1. node 节点 执行
  2. cd /root
  3. chmod +x kubelet.sh
  4. ./kubelet 192.168.100.13
  5. ./kubelet 192.168.100.14

image_1dipm57qcmi28fu9vpj2n1q6er0.png-201.6kB

image_1dipm7h3318g49fe1kq41c0k1895rp.png-561.1kB

4.png-386.9kB

  1. kube-proxy 部署
  2. scp kube-proxy 192.168.100.13:/opt/kubernetes/bin/
  3. scp kube-proxy 192.168.100.14:/opt/kubernetes/bin/

image_1dipmh0mo1bo6l091gg41kq3154osm.png-151.5kB

  1. kube-proxy 部署设置
  2. 登录到node节点
  3. chmod +x proxy.sh
  4. ./proxy.sh 192.168.100.13
  5. ./proxy.sh 192.168.100.14
  6. ps -ef |grep proxy

image_1dipnbu7a1bu07lm9kerbn17dtvq.png-442kB

image_1dipnckqc1hmnjdsiv91bvf1sk107.png-459.4kB

  1. 运行一个nginx实例测试
  2. # kubectl run nginx --image=nginx --replicas=3
  3. # kubectl get pod
  4. # kubectl expose deployment nginx --port=88 --target-port=80 --type=NodePort
  5. # kubectl get svc nginx

image_1dipo9ela1mkb8ok1hln1f5m46v10k.png-644.8kB

image_1dipob4om1gjup171q231064skc121.png-196.9kB

image_1dipobvpgsv7jig1r5gbsp12ms12e.png-359kB

image_1dipojvu7jgt1fgh1b9oe68hcn13b.png-385.6kB

image_1dipokd381qr53u3m4d17nb1qe313o.png-180.5kB

image_1dipokvdrrpnhff1itoclr9j6145.png-164.7kB

  1. 主节点 无法 查看 日志
  2. error: You must be logged in to the server (the server has asked for the client to provide credentials ( pods/log nginx-7cdbd8cdc9-z7jpk))
  3. ----
  4. 解决方法:
  5. 开放kubelet 的 匿名访问权限
  6. vim /opt/kubernetes/kubelet.config
  7. 在最后加上:
  8. authentication:
  9. anonymous:
  10. enabled: true
  11. ----
  12. service kubelet restart
  13. kubectl create clusterrolebinding cluster-system-anonymous --clusterrole=cluster-admin --user=system:anonymous

image_1dipovssk1r7r1jr71jv1m1a1nda14i.png-134.6kB
image_1dkfjlqnn1bbo147210q31o553rg9.png-481.7kB
image_1dipplg6dh6tlsrav6bs1uau16c.png-76.2kB
image_1dkfjppep47n1lrqfc31gfvr7cm.png-467.9kB
image_1dipqfcpu19a11i1l1chrd6r3sh179.png-93.3kB


2.8 部署一个kubernetes UI 界面

  1. 下载地址链接:
  2. https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dashboard

  1. 找到K8S 的 源码包 解压
  2. cd /root/kubernetes/
  3. tar -zxvf kubernetes-src.tar.gz
  4. cd /root/kubernetes/cluster/addons/dashboard/

image_1dkfkd45m6rujcheu15lq1pms13.png-273.8kB

  1. kubectl create -f dashboard-configmap.yaml
  2. kubectl create -f dashboard-rbac.yaml
  3. kubectl create -f dashboard-secret.yaml

image_1dkfl3o5s16ja13jv7od36a1gqn1g.png-337.2kB

  1. vim dashboard-controller.yaml
  2. 改image:
  3. image: registry.cn-hangzhou.aliyuncs.com/kuberneters/kubernetes-dashboard-amd64:v1.10.1

image_1dkfl5qik18m6oiu99c6vo1nm91t.png-125.3kB

  1. kubectl create -f dashboard-controller.yaml

image_1dkfl7h752rtnqh7fn112r1iao2a.png-126.6kB

  1. kubectl get pods -n kube-syetem

image_1dkfl9kmuj4116mbo5j1rvdhmu2n.png-160kB

  1. kubectl get pods -n kube-system --all-namespaces

image_1dkflca164nm1bup1qjk1r55kuk34.png-229.8kB

  1. 修改: dashboard-service.yaml
  2. vim dashborad-service.yaml
  3. 增加:
  4. type: NodePort
  5. kubectl create -f dashboard-service.yaml

image_1dkflkul13cvskqnfb1f41nq34h.png-183kB

image_1dkflnclhusv1lpv7s2k8klq25u.png-116.6kB

  1. kubectl get svc -n kube-system

image_1dkflp363u9gvf2in11laf177o6b.png-170.7kB

  1. kubectl get pods -o wide --all-namespaces

image_1dkfm2svm154610i2st6e9aaut78.png-227.4kB

  1. 打开浏览器 访问
  2. https://192.168.100.13:34392
  3. 使用 Firefox 浏览器

image_1dkfmhel21h8a1j131hdctjv1mnj85.png-300.1kB

  1. 使用 k8s-admin 令牌 登录
  2. k8s-admin.yaml
  3. ---
  4. apiVersion: v1
  5. kind: ServiceAccount
  6. metadata:
  7. name: dashboard-admin
  8. namespace: kube-system
  9. ---
  10. kind: ClusterRoleBinding
  11. apiVersion: rbac.authorization.k8s.io/v1beta1
  12. metadata:
  13. name: dashboard-admin
  14. subjects:
  15. - kind: ServiceAccount
  16. name: dashboard-admin
  17. namespace: kube-system
  18. roleRef:
  19. kind: ClusterRole
  20. name: cluster-admin
  21. apiGroup: rbac.authorization.k8s.io
  22. ---

  1. kubectl create -f k8s-admin.yaml

image_1dkfmq3gr1i884s31cg6rj01nhp8i.png-105.5kB

  1. kubectl get secret -n kube-system
  2. kubectl describe secret dashboard-admin-token-g64n4 -n kube-system
  3. 找到最下面的令牌:
  4. eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tZzY0bjQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiYTA4ZDA0OTQtZDQ2ZC0xMWU5LTkxMGYtMDAwYzI5ZjUyMjMxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.tqFByxlIY3eLjHWzA7nY5Sm3-cHz_vbNSSTCnbe91XKmwJDYSmN-b3XtkR2bWk0PC4UUyPr3HVXqW_tblgbBAOgmm22DI4yXmf0Rn82QBAYEHu-brCxb1u-9NRle09gjlsZtCiTggS5D7Pa-QNXZGYxDEwSPSi19kmvaNJIYVfmJCmTiyW3ObiSKYOLj_f21XOucdfr4lrIt0EA-TksfM3B0DfiEsu_nIGOWCEivh15XLm2hE-en45Y0cNH8XCTlMaOT-WmGUi9E1hZ9da9pKc0wKAuIUgtI25SrzhILabVxw9u-iar2YqFxUrsGf4u55TlJ74x9YKeCYFnqCVhsTg

image_1dkfn2dp8ii91pva1dnq10d714gp9.png-771.2kB

image_1dkfn4vs01uvs19j0i811khj17jcm.png-304.2kB

image_1dkfn7e4l14er41ff611pb1r6h23.png-421.8kB

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注