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

安装环境

操作系统: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 MASTER
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_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[@]} ; do
  docker pull $url/$imagename
  docker tag $url/$imagename k8s.gcr.io/$imagename
  docker 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-admin
  namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值