1. kubernetes 概述
kubernetes, 简称 K8s, 是用 8 代替 8 个字符“ubernete” 而成的缩写。 是一个开源的, 用于管理云平台中多个主机上的容器化的应用,
Kubernetes 的目标是让部署容器化的应用简单并且高效(powerful) ,Kubernetes 提供了应用部署, 规划, 更新, 维护的一种机制。
2. k8s 的功能
1.自动装箱
:基于容器对应用运行环境的资源配置要求自动部署应用容器
2.自我修复(自愈能力)
:当容器失败时, 会对容器进行重启,当所部署的 Node 节点有问题时, 会对容器进行重新部署和重新调度,
当容器未通过监控检查时, 会关闭此容器直到容器正常运行时, 才会对外提供服务
3.水平扩展
: 通过简单的命令、 用户 UI 界面或基于 CPU 等资源使用情况, 对应用容器进行规模扩大或规模剪裁
4.服务发现
:用户不需使用额外的服务发现机制, 就能够基于 Kubernetes 自身能力实现服务发现和负载均衡.
5.滚动更新
:可以根据应用的变化, 对应用容器运行的应用, 进行一次性或批量式更新.
6.版本回退
:可以根据应用部署情况, 对应用容器运行的应用, 进行历史版本即时回退
7.密钥和配置管理
:在不需要重新构建镜像的情况下, 可以部署和更新密钥和应用配置, 类似热部署。
8.存储编排
:自动实现存储系统挂载及应用, 特别对有状态应用实现数据持久化非常重要存储系统可以来自于本地目录、 网络存储(NFS、 Gluster、 Ceph 等)、 公共云存储服务
9.批处理
:提供一次性任务, 定时任务; 满足批量数据处理和分析的场景。
3. k8s 的架构
k8s.png k8s 加购.png4.K8s 的安装
官网地址:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm/
4.1 安装方式
安装采用 : kubeadm
kubeadm部署方式:
kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具, 这个工具能通过两条指令完成一个 kubernetes 集群的部署。
第一. 创建一个 Master 节点 kubeadm init
第二. 将 Node 节点加入到当前集群中 $ kubeadm join <Master 节点的 IP 和端口 >
4.2 安装要求
1.操作系统 CentOS7.x-86_x64
2.硬件配置: 2GB 或更多 RAM, 2 个 CPU 或更多 CPU, 硬盘 30GB 或更多
3.网络要求:集群中所有机器之间网络互通,并且可以联网。
4.禁止 swap 分区
4.3 部署规划
1.在所有节点上安装 Docker 和 kubeadm
2.部署 Kubernetes Master
3.部署容器网络插件
4.部署 Kubernetes Node, 将节点加入 Kubernetes 集群中
5.部署 Dashboard Web 页面, 可视化查看 Kubernetes 资源
4.4 准备组件规划
k8s 准备架构图.png角色 | ip | HostName |
---|---|---|
master | 192.168.1.130 | bigdata001.com |
node | 192.168.1.129 | bigdata002.com |
node | 192.168.1.128 | bigdata003.com |
5. 安装步骤
5.1 关闭防火墙(三台都关闭)
systemctl stop firewalld
systemctl disable firewalld
5.2 关闭 selinux(三台都执行)
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
5.3 关闭 swap(三台都执行))
swapoff -a # 临时
vim /etc/fstab # 永久
5.4 设置主机名 (三台都执行)
hostnamectl set-hostname <hostname>
[root@bigdata001 ~]# vi /etc/hosts
192.168.1.130 bigdata001.com
192.168.1.129 bigdata002.com
192.168.1.128 bigdata003.com
5.5 将桥接的 IPv4 流量传递到 iptables 的链 (三台都执行)
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
5.5 时间同步 (三台都执行)
yum install ntpdate -y
ntpdate time.windows.com
5.6 安装Docker/kubeadm/kubelet (三台都执行)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
安装好后执行
[root@bigdata001 ~]# docker -v
Docker version 18.06.1-ce, build e68fc7a
[root@bigdata001 ~]#
[root@bigdata002 run]# docker -v
Docker version 18.06.1-ce, build e68fc7a
[root@bigdata002 run]#
[root@bigdata003 etc]# docker -v
Docker version 19.03.6, build 369ce74a3c
[root@bigdata003 etc]#
**************************************************
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
5.7 添加阿里云YUM软件源 (三台都执行)
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
5.8 安装kubeadm,kubelet和kubectl (master执行)
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet
5.9 部署Kubernetes Master
kubeadm init \
--apiserver-advertise-address=192.168.1.130 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
*****************************************************************************************************************
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
5.10加入Kubernetes Node 這個是在上一个命令中可以看到 (其他两台都执行)
kubeadm join 192.168.1.11:6443 --token esce21.q6hetwm8si29qxwn \
--discovery-token-ca-cert-hash sha256:00603a05805807501d7181c3d60b478788408cfe6cedefedb1f97569708be9c5
*****************************************************************************************************************
默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,操作如下:
kubeadm token create --print-join-command
5.11部署CNI网络插件(master执行)
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
默认镜像地址无法访问,sed命令修改为docker hub镜像仓库。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl get pods -n kube-system
这是时候会遇到 无法访问 我们需要在(http://ip.tool.chinaz.com/raw.githubusercontent.com)查询到 对应的ip 添加到hostname 中去如:
查询出来raw.githubusercontent.com 对应的ip 185.199.110.133
185.199.110.133 raw.githubusercontent.com
然后查询出来的状态为为Running 才可以用
[root@bigdata001 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-7ff77c879f-qbnfk 1/1 Running 0 9h
coredns-7ff77c879f-rr69c 1/1 Running 0 9h
etcd-bigdata001.com 1/1 Running 3 9h
kube-apiserver-bigdata001.com 1/1 Running 3 9h
kube-controller-manager-bigdata001.com 1/1 Running 2 9h
kube-flannel-ds-4zzl7 1/1 Running 0 8h
kube-flannel-ds-cv7kf 1/1 Running 0 8h
kube-flannel-ds-x2cnn 1/1 Running 1 8h
kube-proxy-c9cdb 1/1 Running 2 9h
kube-proxy-txxrb 1/1 Running 3 9h
kube-proxy-xtq84 1/1 Running 3 9h
kube-scheduler-bigdata001.com 1/1 Running 2 9h
********************************************************************************************
5.12 测试kubernetes集群((Master执行))
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
*******************************************************************************************
三台机器的状态都为 Ready
[root@bigdata001 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
bigdata001.com Ready master 9h v1.18.0
bigdata002.com Ready <none> 9h v1.18.0
bigdata003.com Ready <none> 9h v1.18.0
[root@bigdata001 ~]#
遇到的问题可以重启 :
systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet
systemctl restart kube-proxy
********************************************************************************************
注意:官网收集的错误信息
https://www.bookstack.cn/read/kubernetes-practice-guide/troubleshooting-problems-pod-keep-pending.md
6. 访问
[root@bigdata001 ~]# kubectl get pod,svc
NAME READY STATUS RESTARTS AGE
pod/nginx-f89759699-rj6sv 1/1 Running 0 8h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9h
service/nginx NodePort 10.106.189.92 <none> 80:30916/TCP 8h
[root@bigdata001 ~]#
说明 :映射的端口 都为 30916
访问的ip
k8s nginx.png
网友评论