kubernetes学习笔记(一)kubernetes介绍与安装
Kubernetes是什么?Kubernetes,又称为k8s(首字母为k、首字母与尾字母之间有8个字符、尾字母为s,所以简称k8s)或者简称为“kube”,是一种可自动实施Linux容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行Linux容器的多组主机聚集在一起,由kubernetes帮助您轻松高效地管理这些集群。而且这些集群可跨公共云、私有
Kubernetes是什么?
Kubernetes,又称为k8s(首字母为k、首字母与尾字母之间有8个字符、尾字母为s,所以简称k8s)或者简称为“kube”,是一种可自动实施Linux容器操作的开源平台。它可以帮助用户省去应用容器化过程的许多手动部署和扩展操作。也就是说,您可以将运行Linux容器的多组主机聚集在一起,由kubernetes帮助您轻松高效地管理这些集群。而且这些集群可跨公共云、私有云或混合云部署主机。因此,对于要求快速扩展的云原生应用而言(例如借助Apache Kafka进行的实时数据流),kubernetes是理想的托管平台。
Kubernetes最初由Google的工程师开发和设计。Google是最早研发Linux容器技术的企业之一(组建了cgroups),曾公开分享介绍Google如何将一切都运行于容器之中(这是Google云服务背后的技术)。Google每周会启用超过20亿个容器——全都由内部平台Borg支撑。Borg是Kubernetes的前身,多年来开发Borg的经验教训成了影响Kubenetes中许多技术的主要因素。
虚拟化架构
kubenetes架构
概念介绍
- kubectl:客户端命令行工具,将接收命令格式化后发送给kube-apiserver,作为整个系统的操作入口。
- kube-apiserver:作为整个系统的控制入口,以REST API服务提供接口。
- kube-controller-manager:用来执行整个系统中的后台任务,包括节点状况、pod个数、pod和service的关联等。
- kube-scheduler:负责节点资源管理,接受来自kube-apiserver创建pod任务,并分配到某节点。
- etcd:负责节点之间的服务发现和配置共享。
- kubeproxy:运行在每个计算节点上,负责pod网络代理。定时从etcd获取到service信息来做相应的策略。
- kubelet:运行在每个己算节点上,作为agent,接受分配该节点的pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。
安装kubernetes环境 --实验拓扑图
使用kubeadm部署k8s集群
准备工作:
关闭防火墙
firewall-cmd --set-default-zone=trusted
关闭selinux
setenforce 0
编辑/etc/selinux/config文件 将 设置 SELINUX=permissive
或 SELINUX=disabled
设置hosts
cat <<EOF >> /etc/hosts
192.168.26.31 vms31.cka.cc vms31
192.168.26.32 vms32.cka.cc vms32
192.168.26.33 vms33.cka.cc vms33
EOF
关闭swap
swapoff -a
sed -i 's/^[^#].*swap/#&/' /etc/fstab
配置YUM
cd /etc/yum.repos.d/
rm -rf * # 在删除这些repo文件之前,首先要把wget装上
wget ftp://ftp.rhce.cc/k8s/*
安装docker
yum install docker -y
systemctl start docker; systemctl enable docker # 开启docker服务并设置开机启动
设置相关属性
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridfe-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl -p
安装kubernetes相关软件包(实验使用的版本是1.15.3,当前最新版1.18.3)
yum install -y kubelet-1.15.3-0 kubeadm-1.15.3-0 kubectl-1.15.3-0 --disableexcludes=kubernetes
# 不指定版本则安装的是最新版本
systemctl start kubelet; systemctl enable kubelet # 启动kubelet服务并设置开机启动
以上设置每台机器都要做
部署kubernetes
仅在master上执行
kubeadm init --kubernetes-version=v1.15.3 --image-repository-registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
# --kubernetes-version=v1.15.3 指定版本号
# --image-repository registry.aliyuncs.com/google_containers 指定下载镜像的仓库
# --pod-network-cidr=10.244.0.0/16 指定pod网络的网段
安装完成后需要运行以下命令(安装完成后会有提示)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
master配置完成
node加入集群(master安装完成后会有提示)
kubeadm join 192.168.26.31:6443 --token e5bfyw.cv935y1sto382rta --discovery-token-ca-cert-hash sha256:8313d9617eaa56a41f2b885961f6135aae4070b163bb4e7177031721e7624976
如果配置错了怎么办?
重新部署环境
kubeadm reset
加入集群的命令找不到了怎么办?
获取加入集群的命令
kubeadm token create --print-join-command
此时,在master上执行kubectl get nodes可以看到所以节点
但是状态都是NotRead,还需要安装网络插件
安装pod网络插件
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/rbac-kdd.yaml
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
稍等片刻再执行kubectl get nodes,可以看到所有的节点都已经Ready了
至此kubernetes集群环境安装完毕。
补充:
设置可以使用tab键补齐命令
编辑/etc/profile文件,添加一行
source <(kubectl completion bash)
编辑完成后,执行source /etc/profile 使其生效
注意:bash-completion.noarch这个包必须要安装才行
启用vim粘贴模式
cat <<EOF >> .vimrc
> set paste
> EOF
删除node节点
例:
kubectl drain vms11.cka.cc --delete-local-data --force --ignore-daemonsets
kubectl delete node vms11.cka.cc
Heapster (已被官方弃用)
Heapster是容器集群监控和性能分析工具
下载 heapster镜像
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.4
执行yaml文件
kubectl apply -f heapster-mod.yaml
kubectl apply -f heapster.yaml
稍等片刻后查看效果
heapster-mod.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
labels:
kubernetes.io/bootstrapping: rbac-defaults
name: system:heapster
rules:
- apiGroups:
- ""
resources:
- events
- namespaces
- nodes
- pods
- nodes/stats
verbs:
- create
- get
- list
- watch
- apiGroups:
- extensions
resources:
- deployments
verbs:
- get
- list
- watch
heapster.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: heapster
namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: heapster
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:heapster
subjects:
- kind: ServiceAccount
name: heapster
namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: heapster
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
k8s-app: heapster
template:
metadata:
labels:
task: monitoring
k8s-app: heapster
spec:
serviceAccountName: heapster
containers:
- name: heapster
image: registry.cn-hangzhou.aliyuncs.com/google_containers/heapster-amd64:v1.5.4
command:
- /heapster
- --source=kubernetes:https://kubernetes.default?useServiceAccount=true&kubeletHttps=true&kubeletPort=10250&insecure=true
---
apiVersion: v1
kind: Service
metadata:
labels:
task: monitoring
kubernetes.io/cluster-service: 'true'
kubernetes.io/name: Heapster
name: heapster
namespace: kube-system
spec:
ports:
- port: 80
targetPort: 8082
selector:
k8s-app: heapster
更多推荐
所有评论(0)