概述
目录
1.环境准备
2.准备工作
2.1 同步所有节点时间
2.2 修改主机名
2.3 配置域名解析
2.4 安装必要的rpm软件
2.5 关闭防火墙
2.6 关闭selinux
2.7 禁用交换分区
2.8 配置网络桥接与路由转发
2.9 配置yum源
2.10 安装docker
3.安装 kubernetes
3.1 添加 Kubernetes 阿里云 yum 源
3.2 安装 kubeadm、kubelet 和 kubectl
3.3 初始化
3.4 安装pod网络附加组件
3.5 加入工作节点
3.6 集群扩容增加node节点
3.7 测试 kubernetes 集群
4.部署Web UI界面(dashboard)
5.安装Heapster
1.环境准备
- 一台或多台机器,配置(最低)2核2G
主机名 | IP 地址 | 操作系统 | 主机角色 |
master | 192.168.6.86 | CentOS 7.5.1804 | k8s-master |
node1 | 192.168.6.87 | CentOS 7.5.1804 | k8s-node |
node2 | 192.168.6.88 | CentOS 7.5.1804 | k8s-node |
- 集群中所有机器之间网络互通
- 可以访问外网,需要拉取镜像
- 禁止 swap 分区
2.准备工作
注:所有的节点都进行配置
2.1 同步所有节点时间
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
vi /etc/sysconfig/clock
添加修改内容:
ZONE="Asia/Shanghai"
UTC=false
ARC=false
yum install -y ntpdate
ntpdate time.windows.com
hwclock --systohc
2.2 修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname node1
hostnamectl set-hostname node2
2.3 配置域名解析
# 修改 /etc/hosts
cat <<EOF >> /etc/hosts
192.168.6.86 master
192.168.6.87 node1
192.168.6.88 node2
EOF
2.4 安装必要的rpm软件
## 安装wget vim net-tools epel-release
yum install -y wget vim net-tools epel-release
## 安装 nfs-utils,必须先安装 nfs-utils 才能挂载 nfs 网络存储
yum install -y nfs-utils
2.5 关闭防火墙
# 开机禁用
systemctl disable firewalld
# 关闭
systemctl stop firewalld
2.6 关闭selinux
# 临时关闭
setenforce 0
# 修改SELINUX的配置文件,关闭SELINUX服务
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
2.7 禁用交换分区
# 临时关闭
swapoff -a
# 如需要永久禁用(可选),打开/etc/fstab注释掉swap那一行。
sed -i 's/.*swap.*/#&/' /etc/fstab
2.8 配置网络桥接与路由转发
# 将桥接的IPv4流量传递到iptables的链
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
2.9 配置yum源
# 下载阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 更新缓存
yum clean all
yum makecache fast
2.10 安装docker
# 安装依赖
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看支持的docker版本
yum list docker-ce --showduplicates | sort -r
指定版本安装
yum -y install docker-ce-19.03.9-3.el7
设置开机启动
systemctl enable docker
启动 docker
systemctl start docker
查看docker服务是否已成功安装并启动
systemctl status docker
修改配置文件
vim /etc/docker/daemon.json # 如果没有就创建
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [
"https://alzgoonw.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
重启docker服务
systemctl restart docker
3.安装 kubernetes
注:所有的节点都配置
3.1 添加 Kubernetes 阿里云 yum 源
# [] 中括号中的是repository id,唯一,用来标识不同仓库
# name 仓库名称,自定义
# baseurl 仓库地址
# enable 是否启用该仓库,默认为1表示启用
# gpgcheck 是否验证从该仓库获得程序包的合法性,1为验证
# repo_gpgcheck 是否验证元数据的合法性 元数据就是程序包列表,1为验证
# gpgkey=URL 数字签名的公钥文件所在位置,如果gpgcheck值为1,此处就需要指定gpgkey文件的位置,如果gpgcheck值为0就不需要此项了
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
# 更新缓存
yum clean all
yum makecache fast
3.2 安装 kubeadm、kubelet 和 kubectl
# 安装时指定版本号
# kubeadm: 用于初始化集群,启动集群的命令工具
# kubelet:集群中运行任务的代理程序,运行在集群所有节点上,用于启动Pod和容器等对象的工具
# kubectl:命令行管理工具,用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件
yum install -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
# 设置开机启动
systemctl enable kubelet
3.3 初始化
注:只在master节点配置
kubeadm init
--apiserver-advertise-address=192.168.6.86
--image-repository registry.aliyuncs.com/google_containers
--kubernetes-version v1.15.0
--service-cidr=10.1.0.0/16
--pod-network-cidr=10.244.0.0/16
注:修改master IP 、kubernetes 版本
初始化完成后页面最下面会生成 token,之后会用到。
kubeadm join 192.168.6.86:6443 --token dlunzx.pcp4bztwfkbdvdt6
--discovery-token-ca-cert-hash sha256:efac3c4983e3172becf195af5f46c7b18ce438b0e7402f61fcabc30680576f26
使用 kubectl 工具
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
查看 .kube 目录,会在根目录下面生成 config 文件
ls .kube/
cache config http-cache
3.4 安装pod网络附加组件
注:只在master节点配置
# 解决kube-flannel.yml下载不下来问题
# vi /etc/hosts文件添加一条
# 199.232.68.133 raw.githubusercontent.com
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 检查CoreDNS pod是否正常工作(检查STATUS是否为Running)
kubectl get pods --all-namespaces -o wide
3.5 加入工作节点
注:node节点配置
在node1,node2节点上执行初始化时日志的输出内容
kubeadm join 192.168.6.86:6443 --token dlunzx.pcp4bztwfkbdvdt6
--discovery-token-ca-cert-hash sha256:efac3c4983e3172becf195af5f46c7b18ce438b0e7402f61fcabc30680576f26
如何移除节点
# 在控制节点上运行
kubectl drain <node name> --delete-local-data --force --ignore-daemonsets
kubectl delete node <node name>
# 在要删除的节点上重置kubeadm安装状态
kubeadm reset
# 重置过程不会重置或清除iptables规则或IPVS表。如果要重置iptables,必须手动执行
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
# 如果要重置IPVS表,则必须运行以下命令
ipvsadm -C
# 删除kubeconfig文件
rm -f $HOME/.kube/config
3.6 集群扩容增加node节点
kubeadm join 192.168.1.138:6443 --token [TOKEN] --discovery-token-ca-cert-hash sha256:[SHA256]
token可以通过如下命令查看:
kubeadm token list
每个token只有24小时的有效期,如果没有有效的token,可以使用如下命令创建:
kubeadm token create
查看Kubernetes认证的SHA256加密字符串:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
3.7 测试 kubernetes 集群
查看节点的状态
状态为Ready表示和Master节点正常通信
[root@master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 22h v1.15.0
node1 Ready <none> 22h v1.15.0
node2 Ready <none> 22h v1.15.0
查看k8s系统状态
状态为running表示正常
kubectl get pods --all-namespaces -o wide
测试pod
在 Kubernetes 集群中创建一个 pod,验证是否正常运行
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
访问地址:http://NodeIP:Port(本次安装对应地址:http://192.168.6.86:30606)
4.部署Web UI界面(dashboard)
注:master节点部署
# 下载kubernetes-dashboard.yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
#编辑kubernetes-dashboard.yaml
vi kubernetes-dashboard.yaml
# ------------------- Dashboard Deployment ------------------- #
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: kubernetes-dashboard
template:
metadata:
labels:
k8s-app: kubernetes-dashboard
spec:
containers:
- name: kubernetes-dashboard
# image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
image: lizhenliang/kubernetes-dashboard-amd64:v1.10.1
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
# 新加 type:NodePort
type: NodePort
ports:
- port: 443
targetPort: 8443
# 新加 nodePort: 30001
nodePort: 30001
selector:
k8s-app: kubernetes-dashboard
启动kubernetes-dashboard.yaml 文件
kubectl apply -f kubernetes-dashboard.yaml
所有节点拉取镜像
docker pull lizhenliang/kubernetes-dashboard-amd64:v1.10.1
查看dashboard运行状态
kubectl get pods -n kube-system -o wide
查询dashboard端口号
kubectl get svc -n kube-system -o wide
通过浏览器访问https://192.168.6.86:30001/
谷歌浏览器会报您的连接不是私密连接错误,在当前页面打开的时候点网页任意地方,不是在输入框,不是在输入框,不是在输入框,在chrome该页面上,直接键盘敲入这11个字符:thisisunsafe(鼠标点击当前页面任意位置,让页面处于最上层即可输入),或者使用火狐浏览器。
创建 service account 并绑定默认 cluster-admin 管理员集群角色并生成令牌(仅在master上面操作)
kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
忘记token可以查看
kubectl describe secrets -n kube-system dashboard-admin
复制令牌到浏览器中登录
5.安装Heapster
编辑资源文件
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: k8s.gcr.io/heapster-amd64:v1.5.4 将默认google的官方镜像替换为阿里云镜像
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
# For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
# If you are NOT using this as an add-on, you should comment out this line.
kubernetes.io/cluster-service: 'true'
kubernetes.io/name: Heapster
name: heapster
namespace: kube-system
spec:
ports:
- port: 80
targetPort: 8082
selector:
k8s-app: heapster
heapster-clusterrole.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
kubectl apply -f heapster.yaml
kubectl apply -f heapster-clusterrole.yaml
效果:
最后
以上就是无奈鸵鸟为你收集整理的kubernetes单master集群搭建的全部内容,希望文章能够帮你解决kubernetes单master集群搭建所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复