ubuntu18.04 安装部署k8s 1.18.0版本
Kubernetes是什么?
首先,它是一个全新的基于容器技术的分布式架构领先方案。这个方案尽然很新,但它是谷歌十几年以来大规模应用容器技术的经验积累和升华的一个重要成果。确切地说,kubernetes是谷歌严格保密十几年的秘密武器Borg的一个开源版本。Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨多个数据中心的资源利用率的最大化。
2015年4月,传闻许久的Borg论文伴随kubernetes(K8S)的高调宣传被谷歌首次公开,大家才得以了解它的更多内幕。正是由于站在Borg这个前辈的肩膀上,吸取了Borg过去十年间的经验与教训,所以kubernetes一经开源就一鸣惊人,并迅速称霸了容器技术领域。
如果我们的系统设计遵循了kubernetes的设计思想,那么传统系统架构中哪些和业务没有多大关系的底层代码或功能模块,都可以立刻从我们的视线中消失,我们不必再费心于负载均衡的选型和部署实施问题,不必再考虑引入或自己开发一个复杂的服务治理框架,不必再头疼与服务监控和故障处理模块的开发。总之,使用kubernetes提供的解决方案,我们节约了不少于30%的开发成本,同时可以将精力更加集中于业务本身,而且由于kubernetes提供了强大的自动化机制,所以系统后期的运维难度和运维成本大幅降低。
Kubernetes概述
Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。
Kubernetes 特点
可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展: 模块化,插件化,可挂载,可组合
自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
Kubernetes 组件
1、Master 组件
1.1kube-apiserver
1.2ETCD
1.3kube-controller-manager
1.4cloud-controller-manager
1.5kube-scheduler
1.6插件 addons
1.6.1DNS
1.6.2用户界面
1.6.3容器资源监测
1.6.4Cluster-level Logging
2、节点(Node)组件
2.1kubelet
2.2kube-proxy
2.3docker
2.4RKT
2.5supervisord
2.6fluentd
kubelet :运行在 Cluster 所有节点上,主要负责启动 Pod 和容器。
kubeadm :用于初始化和引导Cluster(是官方推出快速部署k8s集群,其本质是将k8s的相关服务容器化)
kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
Kubernetes+docker集群安装部署
一、 安装前准备:
关闭防火墙,关闭iptables,关闭交换分区
systemctl stop ufw
节点主机名唯一,建议写入/etc/hosts
禁止swap分区
关闭防火墙
hostnamectl set-hostname k8s-master
tail /etc/hosts
192.168.3.101 k8s-master
root@ubuntu:~# ufw status
Status: inactive
# swapoff -a # 临时
# vim /etc/fstab # 永久
同时在每台机器的/etc/hosts配置如下
192.168.168.225 k8s
192.168.168.222 node1
192.168.168.223 node2
安装docker和kubectl
建议版本:docker-ce-18.0x
Apt源建议使用阿里源
Vim /etc/apt/sources.list
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
可能在 apt-get update 时会碰到 no pubkey ...
执行下面命令解决
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add –
apt-get update && apt-get install -y apt-transport-https
sudo dpkg -i docker-ce_18.06.0_ce_3-0_ubuntu_amd64.deb
sudo apt-get install -f
sudo dpkg -i docker-ce_18.06.0_ce_3-0_ubuntu_amd64.deb
sudo apt-get install -y kubelet kubeadm kubectl
systemctl daemon-reload
systemctl start docker
systemctl enable docker kubelet
拉取镜像:
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.0
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.0
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.3-0
docker pull registry.aliyuncs.com/google_containers/coredns:1.6.7
docker pull registry.aliyuncs.com/google_containers/pause:3.2
修改tag
docker tag registry.aliyuncs.com/google_containers/kube-apiserver:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0
docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy
docker tag registry.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0
docker tag registry.aliyuncs.com/google_containers/kube-scheduler:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0
docker tag registry.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd: 3.4.3-0
docker tag registry.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns: 1.6.7
docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
初始化k8s:
sudo kubeadm init --kubernetes-version=v1.18.0 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.96.0.0/16 --ignore-preflight-errors=Swap
根据提示进行创建和拷贝文件
sudo cp -i /etc/kubernetes/admin.conf /home/zhangyu/.kube/config
sudo chown zhangyu:zhangyu /home/zhangyu/.kube/config
vim ~/.bashrc
export KUBECONFIG=/etc/kubernetes/admin.conf
source ~/.bashrc
现在记录好加入k8s的token
开始部署网络插件:
https://docs.projectcalico.org/v3.10/manifests/calico.yaml
sudo kubectl apply -f calico.yaml
等待拉取并启动
至此k8s集群基本搭建完成了,检查一下:
kubectl get pod --all-namespaces //查看pod是否是running状态
kubectl get nodes 查看节点信息
sudo kubectl get pods --all-namespaces -o wide
部署仪表盘dashboard
1、 下载启动文件
https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
2、 拉取镜像(我们已经拉取,可以直接使用,下方见链接地址)
3、 修改启动文件
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 32000
selector:
k8s-app: kubernetes-dashboard
type: NodePort
4,启动容器并查看:
sudo kubectl apply -f recommended.yaml
sudo kubectl get pods --all-namespaces -o wide
4、 创建admin用户
vim create-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
sudo kubectl apply -f create-admin.yaml
sudo kubectl -n kubernetes-dashboard get secrets
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
至此结束部署