kubernetes-1.16.4安装(包括Dashboard界面)

news/2024/10/31 1:33:49/

安装环境

操作系统:CentOS-7.6

内核版本:3.xxx

Docker版本:18.09.9

Kubernetes版本:1.16.4

服务架构

master(hostname):

        ip:47.21.122.31

        核心数:2 core

        内存:4 GB


node1(hostname):

        ip:47.21.122.33

        核心数:2 core

        内存:4 GB


node2(hostname):

        ip:47.21.122.32

        核心数:2 core

        内存:4 GB

安装前的准备工作

1. 配置 /etc/host 文件

cat >> /etc/hosts << EOF

47.21.122.31    master

47.21.122.33    node1

47.21.122.32    node2

EOF

2. 禁用swap(Kubernetes-1.16.4安装时不禁用会报错)

# 临时禁用,执行以下命令:

swapoff -a

# 永久禁用,需要在swapoff -a之后,执行以下命令:

sed -i.bak '/swap/s/^/#/' /etc/fstab

3. SSH免密登录(只要操作master节点)

# 生成本地私钥和公钥

ssh-keygen -t rsa

# 将公钥拷贝到指定主机

ssh-copy-id node1

ssh-copy-id node2

4. 设置kubernetes源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[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

4.1 更新缓存

yum clean all

yum -y makecache

Docker安装(master节点和node节点都操作)

1. 配置docker源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

2. 安装依赖包 yum-utils

yum install -y yum-utils device-mapper-persistent-data lvm2

3. 设置从stable仓库获取docker资源

yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

4. 安装docker(这里指定18.09.9版本)

yum install docker-ce-18.09.9 docker-ce-cli-18.09.9 containerd.io -y

# 注:查看docker历史版本命令

yum list docker-ce --showduplicates | sort -r

5. 启动docker(设置开机自动重启)

systemctl start docker && systemctl enable docker

6. 命令补全

# 安装bash-completion

yum -y install bash-completion

# 加载bash-completion

source /etc/profile.d/bash_completion.sh

7. 镜像加速(并修改Cgroup Driver)

# 编辑docker-daemon文件

vim /etc/docker/daemon.json

{"registry-mirrors": ["https://usydjf4t.mirror.aliyuncs.com", "https://registry.docker-cn.com"], "exec-opts": ["native.cgroupdriver=systemd"]
}

# 重新加载docker
systemctl daemon-reload

# 重启docker服务
systemctl restart docker

# 注:修改cgroupdriver是为了消除告警:

[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/

Keepalived安装(master节点安装)

前言

    为了保证Master的高可用,会使用多个服务器(作为一个Master集群,一般使用3台服务器,每台服务器都需要安装kube-apiserver、kube-controller-manager、kube-scheduler、etcd等组件),客户端将会通过负载均衡器进行访问kube-apiserver(Master服务器)。在不同的平台下,负载均衡的实现方式不同:公有云一般都有现成的实现方案(这里不进行过多讨论);本地集群,可以选择硬件(例如,F5)或者软件来实现,kubernetes社区推荐方案HAProxy和Keepalived,其中HAProxy负责负载均衡,而Keepalived负责对HAProxy进行监控和故障切换。

    由于只有一台2核机器,这里没有使用master集群,也没有使用HAProxy,但是仍然提供了Keepalived的安装,以便于使用虚拟IP(47.21.122.130),Node节点可以通过该IP进行访问Master,即使其他Master加入之后,也是通过虚拟IP进行访问

1. 安装keepalived

yum -y install keepalived

2. keepalived配置

# 保留默认配置

mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived_default.conf

# 写入新的配置

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {router_id hadoop101
}vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 50priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {172.21.122.130}
}

3. 启动keepalived

service keepalived start && systemctl enable keepalived

4. VIP 查看

ip a

安装Kubernetes(master节点和node节点都操作)

1. 查看kubernetes版本

yum list kubelet --showduplicates | sort -r

2. 安装kubelet、kubeadm和kubecrl(注意版本号,根据需要进行改变)

yum install -y kubelet-1.16.4 kubeadm-1.16.4 kubectl-1.16.4
说明:

  • kubelet 运行在集群所有节点上,用于启动Pod和容器等对象的工具
  • kubeadm 用于初始化集群,启动集群的命令工具
  • kubectl 用于和集群通信的命令行,通过kubectl可以部署和管理应用,查看各种资源,创建、删除和更新各种组件

3. 启动kubelet(并设置为开机自启动)

systemctl enable kubelet && systemctl start kubelet

4. 命令补全

echo "source <(kubectl completion bash)" >> ~/.bash_profile
source .bash_profile

5. 下载镜像

# 下载部署kubernetes所需要的所有镜像

vim image.sh

#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers #阿里云镜像仓库地址,可以按需修改
version=v1.16.4 #安装的kubernetes的版本(可以按需修改)
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; dodocker pull $url/$imagenamedocker tag $url/$imagename k8s.gcr.io/$imagenamedocker rmi -f $url/$imagename
done

chmod 755 image.sh
./image.sh

6. 查看已经下载的镜像

docker images

配置网络插件 flannel(master节点操作)

1. br_netfilter模块加载

# 查看br_netfilter模块

lsmod |grep br_netfilter

# 如果系统没有br_netfilter模块则执行下面的新增命令,如有则忽略

vim /etc/rc.sysinit

#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done

vim /etc/sysconfig/modules/br_netfilter.modules

modprobe br_netfilter

chmod 755 /etc/sysconfig/modules/br_netfilter.modules

2. 内核参数永久修改

vim /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

sysctl -p /etc/sysctl.d/k8s.conf

初始化master(master节点操作)

1. 创建初始化文件

# 获取默认的初始化参数文件

kubeadm config print init-defaults > init.default.yaml

# 查看init.default.yaml文件

cat init.default.yaml

# 配置初始化文件

vim /root/kubeadm.conf.yaml

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: v1.16.4
apiServer:certSANs:    #填写所有kube-apiserver节点的hostname、IP- hadoop101- hadoop102- hadoop103- 172.21.122.35- 172.21.122.36- 172.21.122.34
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
networking:podSubnet: "10.244.0.0/16" #这里需要根据具体的网络插件来配置(这里使用的flannel网络插件配置)

2. 初始化kubernetes

# 初始化kubeadm.conf.yaml文件

kubeadm init --config=kubeadm.conf.yaml

说明:
    如果初始化失败,可执行kubeadm reset后重新初始化(执行以下两条命令)
kubeadm reset
rm -rf $HOME/.kube/config

# 保存初始化成功的最后一段信息,用于其他节点加入时使用

例:

kubeadm join 172.21.122.35:6443 --token 7uz9q5.lt1nfidq6xr2olkf \
    --discovery-token-ca-cert-hash sha256:5c6b1dcdf420773746c1b44f4b791116de07db2f68b4bb9984eae1088472234a

3. 加载环境变量

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

node节点加入集群(node节点操作)

1. 开启Master节点防火墙端口

# 查看防火墙状态

systemctl status firewalld

# 开启6443端口

firewall-cmd --zone=public --add-port=6443/tcp --permanent
出现success表明添加成功

命令含义:
--zone #作用域
--add-port=80/tcp  #添加端口,格式为:端口/通讯协议
--permanent   #永久生效,没有此参数重启后失效

# 重启防火墙

systemctl restart firewalld.service

说明:
Kubernetes集群中的Service可使用的物理机端口号范围为30000~32767
一次全部公开所有可能使用的端口:
firewall-cmd --zone=public --add-port=30000-32767/tcp --permanent
systemctl restart firewalld.service

2. 加入集群

# 把之前保存的两行信息复制出来,在node节点执行

kubeadm join 192.168.0.130:6443 --token afeqnz.vhp0e8rtrw6jz6v2 \
    --discovery-token-ca-cert-hash sha256:d6a450aafb14e82efb69fbcb71e426bfed8e423d64b37bac85b3ff8ce7dc6562

# 在master节点,执行以下命令查看已经加入的节点

kubectl get nodes

说明:
由于没有安装网络插件,这里STATUS为NotReady

安装网络插件(master节点操作)

# 在master主机上执行以下命令

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml

说明:
由于网络原因,可能会安装失败,可以在浏览器直接下载kube-flannel.yml文件(也可以在浏览器打开url地址,然后复制文件内容到文件),然后再执行apply

# 查看节点状态

kubectl get nodes

说明:
STATUS从NotReady变为Ready
如安装网络插件之后,长时间状态没有变更,则可以试试重启机器(或者是虚拟机,这里是指Centos 7系统)

Client配置(client端执行)

无,可以用master节点代替

Dashboard搭建(master端执行)

# 下载yaml

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml

# 修改镜像地址

sed -i 's/kubernetesui/registry.cn-hangzhou.aliyuncs.com\/loong576/g' recommended.yaml

# 配置yaml

sed -i '/targetPort: 8443/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' recommended.yaml

说明:
配置NodePort,外部通过https://NodeIp:NodePort 访问Dashboard,此时端口为30001

# 创建超级管理员账号用于登录Dashboard

vim dashboard-adminuser.yaml

---
# ------------------- dashboard-admin ------------------- #
apiVersion: v1
kind: ServiceAccount
metadata:name: dashboard-adminnamespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:name: dashboard-admin
subjects:
- kind: ServiceAccountname: dashboard-adminnamespace: kubernetes-dashboard
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin

# 部署Dashboard

kubectl apply -f recommended.yaml

# 生效 service account

kubectl apply -f dashboard-adminuser.yaml

# 状态查看

kubectl get all -n kubernetes-dashboard

# 令牌查看

kubectl describe secrets -n kubernetes-dashboard dashboard-admin

注:如果忘记Token,可以通过以下命令获取:
kubectl describe secret -n kubernetes-dashboard $(kubectl get secret -n kubernetes-dashboard |grep  kubernetes-dashboard-token | awk '{print $1}') |grep token | awk '{print $2}'

# 使用火狐浏览器浏览

https://master:30001

查找问题方式

# 查看所有Pod

kubectl get pods --all-namespace

# 查看Pod日志(使用真实的pod名称,替换pod-name)

kubectl logs pod-name --all-containers=true

# 查看异常状态的Pod的详细信息

kubectl describe pod kubernetes-dashboard-8478d57dc6-p7jt7 --namespace=kubernetes-dashboard

# 防火墙的问题(如果不关闭防火墙容器可能会出现no host to route错误)

systemctl stop firewalld.service

systemctl disable firewalld.service

# Dashboard证书过期的问题

 # Node节点执行kubectl命令出错问题

需要将master节点的 /etc/kubernetes/admin.conf 文件复制到node节点 /home/.kube 目录下

scp /etc/kubernetes/admin.conf ${username}@${hostname1}:/${home}/.kube/config

scp /etc/kubernetes/admin.conf ${username}@${hostname2}:/${home}/.kube/config


http://www.ppmy.cn/news/368655.html

相关文章

Linux下yum安装MySQL yum安装MySQL指定版本

yum 安装MySQL 1. 检查安装情况 查看有没有安装过&#xff1a; yum list installed MySQL* &#xff08;有存在要卸载yum remove MySQL*&#xff09; rpm -qa | grep mysql* 查看有没有安装包&#xff1a; yum list mysql* 2. 安装 MySQL 安装 MySQL 客户端&#xff1a; yum -y…

运放稳定性连载14:RO何时转变为ZO?(3)

我们现在知道了重负载和空载时的ZO意味着什么。我们关心的另一个关键曲线是RO变成最大值时的轻负载。我们并不十分清楚该工作点的位置&#xff0c;原因是我们不能看到OPA348 A-B类偏置级的内部&#xff0c;但在计算AC传输曲线之前&#xff0c;我们需要知道该点的位置。使用图7.…

制糖脱色的方法

精制糖的市场趋势 随着国内人民生活水平日益提高&#xff0c;用糖客户和消费者对食糖的品种&#xff0c;质量会产生有新的要求&#xff0c;近年来&#xff0c;糖产品种类更加丰富&#xff0c;包装规格与形式更加多样化&#xff0c;同时&#xff0c;消费人群更加注重饮食健康&am…

十大精密电阻排行榜

作者&#xff1a;lymex&#xff0c;排版&#xff1a;晓宇 微信公众号&#xff1a;芯片之家&#xff08;ID&#xff1a;chiphome-dy&#xff09; 一个好的精密电阻&#xff0c;必须具备老化小、温飘小、偏差小的特点&#xff0c;同时最好具备可靠性高、功率余量大温升小、噪音低…

ITK——1. 初步认识和配置编译

文章目录 1. itk基本信息2. 配置和编译itk2.0 基本介绍2.1 下载ITK2.2 使用cmake来配置编译ITK2.2.1 准备CMake2.2.2 配置ITK2.2.3 高级模块配置2.2.4 静态库和共享库2.2.5 编译ITK2.2.6 在系统上安装ITK2.3 交叉编译ITK2.4 开始使用ITK2.5 将ITK作为外部库使用✅ 2.5.1 HelloW…

CSDN专家教程 | Kubernetes(Runtime Docker)高可用集群二进制部署实战:Docker运行时环境详解 ,助您轻松掌握K8s集群部署技巧,提升开发、测试、运维效率

Kubernetes高可用集群二进制部署&#xff08;Runtime Docker&#xff09; Kubernetes&#xff08;简称K8s&#xff09;是一个开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它起源于Google的内部项目Borg&#xff0c;于2014年开源并于2015年交由C…

彩虹5G 逼坑指南

实际上如果各位去B站搜索从评论区还是可以看到彩虹5G这个物联网卡很多负面评论的&#xff0c;基本都是充值买一堆优惠卷&#xff0c;第二个月开始限速&#xff0c;各种手段迫使客户放弃使用上网卡&#xff0c;以达到恶意占有客户资产的目的。 我记得彩虹5G的这张卡是从B站订购…

医用塑胶材料在灭菌中的适应性

本章目的&#xff1a;本文对常见的灭菌法进行了对比总结&#xff0c;并讨论塑胶材料的适应性。 1.物 理 法 有多种物理灭菌法&#xff0c;其中最有效的是将热、湿和压力组合在一个称为高压蒸汽灭菌器的装置中&#xff0c;高压蒸汽灭菌法。 医疗设备的热灭菌法早在古罗马已经得到…