安装部署kubernetes集群(k8s)

什么是kubernetes(k8s)

  • k8s是一个docker集群的管理工具
  • k8s是容器的编排工具

 

kubernetes(k8s)的核心功能

  • 自愈: 重新启动失败的容器,在节点不可用时,替换和重新调度节点上的容器,对用户定义的健康检查不响应的容器会被中止,并且在容器准备好服务之前不会把其向客户端广播。
  • 弹性伸缩: 通过监控容器的cpu的负载值,如果这个平均高于80%,增加容器的数量,如果这个平均低于10%,减少容器的数量服务的自动发和负载均衡: 不需要修改您的应用程序来使用不熟悉的服务发现机制,Kubernetes 为容器提供了自己的 IP 地址和一组容器的单个 DNS 名称,并可以在它们之间进行负载均衡。
  • 滚动升级和一键回滚: Kubernetes 逐渐部署对应用程序或其配置的更改,同时监视应用程序运行状况,以确保它不会同时终止所有实例。 如果出现问题,Kubernetes会为您恢复更改,利用日益增长的部署解决方案的生态系统。私密配置文件管理. web容器里面,数据库的账户密码(测试库密码)

 

kubernetes(k8s)的几种安装方式

  • 源码编译安装—难度最大 可以安装最新版
  • 源码编译安装—难度最大 可以安装最新版
  • 二进制安装—步骤繁琐 可以安装最新版 shell,ansible,saltstack
  • kubeadm 安装最容易, 网络 可以安装最新版
  • minikube 适合开发人员体验k8s, 网络

 

k8s架构:

yum安装部署kubernetes集群(k8s)

 

 

核心组件

etcd存了整个集群的状态
apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理
Container runtime负责镜像管理以及Pod和容器的真正运行(CRI)
kube-proxy负责为Service提供cluster内部的服务发现和负载均衡

 

 

附加组件Add-ons:

组件名称说明
kube-dns负责为整个集群提供DNS服务
Ingress Controller为服务提供外网入口
Heapster提供资源监控
Dashboard提供GUI
Federation提供跨可用区的集群
Fluentd-Elasticsearch提供集群日志采集、存储与查询

 

 

环境要求:

机器名ip地址内存要求
kubernetes-master10.0.0.111g
kubernetes-node110.0.0.121g
kubernetes-node210.0.0.131g

 

1.修改IP地址、主机和host解析

[root@k8s-master ~]# vim /etc/hosts
10.0.0.11 k8s-master
10.0.0.12 k8s-node-1
10.0.0.13 k8s-node-2

所有节点需要做hosts解析

 

2.master节点安装etcd

[root@k8s-master yum.repos.d]# yum install -y etcd

 

#修改etcd.conf配置文件

[root@k8s-master yum.repos.d]# vim /etc/etcd/etcd.conf
6行:ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"             #监听的地址
21行:ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"       #集群访问此节点的地址

#重启etcd服务并且开机自启动
[root@k8s-master yum.repos.d]# systemctl start etcd.service
[root@k8s-master yum.repos.d]# systemctl enable etcd.service

#etcd存值
etcdctl set testdir/testkey0 0
#etcd取值
etcdctl get testdir/testkey0

#集群健康状态见擦汗
[root@k8s-master yum.repos.d]# etcdctl -C http://10.0.0.11:2379 cluster-health
member 8e9e05c52164694d is healthy: got healthy result from http://10.0.0.11:2379
cluster is healthy

 

3.master节点安装kubernetes

[root@k8s-master yum.repos.d]# yum install kubernetes-master.x86_64 -y

 

#修改apiserver配置文件

[root@k8s-master yum.repos.d]# vim /etc/kubernetes/apiserver
#监听地址               8行: KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"          
#api监听端口            11行:KUBE_API_PORT="--port=8080"
#kubelet监听端口         14行: KUBELET_PORT="--kubelet-port=10250"
#etcd集群信息存储位置    17行:KUBE_ETCD_SERVERS="--etcd-servers=http://10.0.0.11:2379"
#管理员控制策略          23行:KUBE_ADMISSION_CONTROL="--admissioncontrol=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

 

#修改controller manager和scheduler的配置文件

[root@k8s-master yum.repos.d]# vim /etc/kubernetes/config
#指定apiserver地址       22行:KUBE_MASTER="--master=http://10.0.0.11:8080"

 

#重启修改的配置文件服务

systemctl enable kube-apiserver.service
systemctl restart kube-apiserver.service
systemctl enable kube-controller-manager.service
systemctl restart kube-controller-manager.service
systemctl enable kube-scheduler.service
systemctl restart kube-scheduler.service

 

#检查服务是否安装正常

[root@k8s-master yum.repos.d]# kubectl get componentstatus
NAME                 STATUS    MESSAGE             ERROR
etcd-0               Healthy   {"health":"true"}   
scheduler            Healthy   ok                  
controller-manager   Healthy   ok

 

4.node节点安装kubernetes

[root@k8s-node-1 yum.repos.d]# yum install kubernetes-node.x86_64 -y

 

#修改node-1节点配置文件

[root@k8s-node-1 ~]#  vim /etc/kubernetes/config
#指定apiserver地址     22行:KUBE_MASTER="--master=http://10.0.0.11:8080"

 

#修改node-1节点kubelet配置文件

[root@k8s-node-1 ~]#  vim /etc/kubernetes/kubelet
#kubelet监听地址      5行:KUBELET_ADDRESS="--address=0.0.0.0"
#kubelet监听端口      8行:KUBELET_PORT="--port=10250"
#kubelet名字         11行:KUBELET_HOSTNAME="--hostname-override=10.0.0.12"
#指定apiserver地址    14行:KUBELET_API_SERVER="--api-servers=http://10.0.0.11:8080"

 

#重启修改配置文件服务

systemctl enable kubelet.service
systemctl restart kubelet.service
systemctl enable kube-proxy.service
systemctl restart kube-proxy.service

 

#在master节点检查

[root@k8s-master yum.repos.d]# kubectl get node
NAME        STATUS    AGE
10.0.0.12   Ready     15m
10.0.0.13   Ready     19s

 

5.所有节点配置flannel网络

[root@k8s-master ~]# yum install flannel -y

#修改flannel信息存储在etcd的ip地址
[root@k8s-master ~]# sed -i 's#http://127.0.0.1:2379#http://10.0.0.11:2379#g' /etc/sysconfig/flanneld


##master节点设置flannel网络范围并安装docker:
[root@k8s-master ~]# etcdctl mk /atomic.io/network/config '{ "Network":"172.18.0.0/16" }'

[root@k8s-master ~]# yum install docker -y
[root@k8s-master ~]# systemctl enable flanneld.service
[root@k8s-master ~]# systemctl restart flanneld.service
[root@k8s-master ~]# systemctl restart docker
[root@k8s-master ~]# systemctl enable docker
[root@k8s-master ~]# systemctl restart kube-apiserver.service
[root@k8s-master ~]# systemctl restart kube-controller-manager.service
[root@k8s-master ~]# systemctl restart kube-scheduler.service


#当docker启动时加载会flannel.conf并且生成网段
[root@k8s-master ~]# cat /usr/lib/systemd/system/docker.service.d/flannel.conf 
[Service]
EnvironmentFile=-/run/flannel/docker
[root@k8s-master ~]# cat /run/flannel/docker 
DOCKER_OPT_BIP="--bip=172.18.3.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"
DOCKER_NETWORK_OPTIONS=" --bip=172.18.3.1/24 --ip-masq=true --mtu=1472"
##所有node节点:
systemctl enable flanneld.service
systemctl restart flanneld.service
systemctl restart docker
systemctl restart kubelet.service
systemctl restart kube-proxy.service


#在所有node节点[Service]区域下增加一行
作用:使得跨宿主机之间容器可以通讯
[root@k8s-node-1 ~]# vim /usr/lib/systemd/system/docker.service
ExecStartPost=/usr/sbin/Iptables -P FORWARD ACCEPT

[root@k8s-node-1 ~]# systemctl daemon-reload
[root@k8s-node-1 ~]# systemctl restart docker

 

#flannel安装完成之后会多出一块网卡并与docker同一网段

yum安装部署kubernetes集群(k8s)

 

6.配置master为镜像仓库

#所有节点
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.11:5000"]
}
systemctl restart docker
#master节点
[root@k8s-master ~]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry


#上传镜像测试
[root@k8s-node-2 ~]# docker tag alpine:latest 10.0.0.11:5000/alpine:latest
[root@k8s-node-2 ~]# docker push 10.0.0.11:5000/alpine:latest 
The push refers to a repository [10.0.0.11:5000/alpine]
1bfeebd65323: Pushed 
latest: digest: sha256:57334c50959f26ce1ee025d08f136c2292c128f84e7b229d1b0da5dac89e9866 size: 528
赞赏

微信赞赏支付宝赞赏

Kubernetes

安装部署kubernetes之kubeadm(k8s)

2020-3-6 6:14:00

Shell

linux中 单引号 双引号 无引号 反引号之间的区别

2019-10-29 8:02:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索