一、安装k8s

1.1、安装环境

                docker v19.03.15

                Centos 8 安装docker_centos8安装docker_一般等价物(污妖王)的博客

节点

IP

主机名

master

192.168.110.251

test251

node1

192.168.110.252

test252

node2

192.168.110.253

test253

--------------------      以下步骤所有机器都要执行↓

1.2、设置hosts

vim /etc/hosts

centos7 一键安装mysql centos7 一键安装k8s_bash

1.3、开放端口

云服务器部署需要开放以下端口(测试环境如无安全限制,可忽略)

master节点:TCP端口:6443,2379,2380,60080,60081

                      UDP端口全开

node节点  :UDP端口全开

firewall-cmd --zone=public --add-port=6443/tcp --permanent
firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --zone=public --add-port=2380/tcp --permanent
firewall-cmd --zone=public --add-port=60080/tcp --permanent
firewall-cmd --zone=public --add-port=60081/tcp --permanent
firewall-cmd --zone=public --add-port=10250/tcp --permanent

firewall-cmd --reload

1.4、安装依赖环境

yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstatlibseccomp wget vim net-tools git iproute lrzsz bash-completion tree bridge-utils unzip bind-utils gcc

1.5、防火墙配置(生产环境建议别玩)

# 关闭防火墙(生产环境建议使用放行端口)
systemctl stop firewalld && systemctl disable firewalld

# 置空iptables (生产环境别执行)
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save

1.6、关闭selinux[必须操作]

# 关闭swap分区【虚拟内存】并且永久关闭虚拟内存
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab


# 关闭selinux
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

1.7、调整内核参数

cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
#将优化内核文件拷贝到/etc/sysctl.d/文件夹下,这样优化文件开机的时候能够被调用
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf


#手动刷新,让优化文件立即生效
sysctl -p /etc/sysctl.d/kubernetes.conf

1.8、调整系统临时区

#设置系统时区为中国/上海
timedatectl set-timezone "Asia/Shanghai"

#将当前的UTC 时间写入硬件时钟
timedatectl set-local-rtc 0

#重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond

1.9、关闭系统不需要的服务(生产环境别玩)

systemctl stop postfix && systemctl disable postfix

1.10、设置日志保存方式

# 创建保存日志的目录
mkdir /var/log/journal

# 创建配置文件存放目录
mkdir /etc/systemd/journald.conf.d

# 创建配置文件
cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
Storage=persistent
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
SystemMaxUse=10G
SystemMaxFileSize=200M
MaxRetentionSec=2week
ForwardToSyslog=no
EOF

# 重启systemd journald 的配置
systemctl restart systemd-journald

1.11、打开文件数调整(可不执行)

echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf

1.12、kube-proxy 开启 ipvs 前置条件

modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 使用lsmod命令查看这些文件是否被引导
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

centos7 一键安装mysql centos7 一键安装k8s_centos_02

 1.13、kubeadm安装k8s

# 国内镜像配置(国内建议配置)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

1.14、安装kubeadm、kubelet、kubectl

# 查看kubeadm可用版本
yum list -y kubeadm --showduplicates|grep 1.19

centos7 一键安装mysql centos7 一键安装k8s_bash_03

# 安装1.19.16版本
yum install -y kubeadm-1.19.16-0 kubectl-1.19.16-0 kubelet-1.19.16-0


# 如果安装报错,卸载后重装
yum remove -y kubelet kubeadm kubectl

centos7 一键安装mysql centos7 一键安装k8s_kubernetes_04

# kubelet开机启动
systemctl enable kubelet && systemctl start kubelet

--------------------      以上步骤所有机器都要执行↑

二、初始化master节点

我将配置文件放在 /data/k8s文件夹中,所以先创建文件夹

# 创建
mkdir /data/k8s -p

cd /data/k8s

2.1 方式一

2.1.1 修改配置文件

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

A、将advertiseAddress: 1.2.3.4修改为本机地址,我这里是

advertiseAddress: 192.168.110.251

B、将imageRepository: k8s.gcr.io修改为

imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

C、新增pod子网络

podSubnet: 10.244.0.0/16

修改后配置文件如下图

centos7 一键安装mysql centos7 一键安装k8s_bash_05

2.1.2、根据配置文件拉取镜像

kubeadm config images pull --config kubeadm-init.yaml

2.1.3、执行初始化

kubeadm init --config kubeadm-init.yaml

2.2 方式二 

# 直接执行脚本,效果同2.1到2.3
kubeadm init \
--apiserver-advertise-address=192.168.110.251 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.19.16 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16 \
--service-dns-domain=cluster.local \
--ignore-preflight-errors=Swap \
--ignore-preflight-errors=NumCPU

 出现下面的信息表示安装成功

centos7 一键安装mysql centos7 一键安装k8s_centos_06

2.3、配置kubectl执行命令环境

# 配置kubectl执行命令环境
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

2.4、 启用 kubectl 命令自动补全功能

# 启用 kubectl 命令自动补全功能
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc

2.5、配置网络

方式一:Calico

# 下载Calico配置文件
wget https://docs.projectcalico.org/v3.20/manifests/calico.yaml


# 编辑calico.yaml
vim calico.yaml

搜索关键字CLUSTER_TYPE,在它下面增加网卡配置

# IP automatic detection
- name: IP_AUTODETECTION_METHOD
value: "interface=en.*"

centos7 一键安装mysql centos7 一键安装k8s_linux_07

 构建Calico网络

kubectl apply -f calico.yaml

然后等。。。。

用  kubectl get po -n kube-system 查看状态

kubectl get po -n kube-system

状态都是Running,表示安装成功

centos7 一键安装mysql centos7 一键安装k8s_linux_08

方式二:Flannel

下载Flannel源码zip包,我这里是0.19.2版本

Release v0.19.2 · flannel-io/flannel · GitHub

centos7 一键安装mysql centos7 一键安装k8s_centos_09

 解压

# 解压
unzip flannel-0.19.2.zip

# 进入文件夹
cd ./flannel-0.19.2/Documentation

# 修改配置文件kube-flannel.yml
vim kube-flannel.yml

 NetWork改成和脚本中pod-network-cidr一致

centos7 一键安装mysql centos7 一键安装k8s_centos7 一键安装mysql_10

 添加一行宿主机网卡名称,我的是ens33

centos7 一键安装mysql centos7 一键安装k8s_bash_11

 执行安装

# 安装flannel

kubectl create -f ./kube-flannel.yml

2.6 其他node节点加入集群(不是master节点)

# 这是2.3里面的代码,根据自己情况复制粘贴,这个是我的

kubeadm join 192.168.110.251:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:5150588f09a9f1c8538cc67262a1f788fd0b6c0073c7c9357c467312b2a1f69b

PS:如果上面的代码忘了

# 先执行
kubeadm token list

 1、如果有数据

# 如果有结果,则执行
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

# 将看到的sha256带入命令
kubeadm join 192.168.110.251:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:<看到的sha256>

2、如果没有数据 

# 重新生成一个
kubeadm token create --print-join-command

 然后每个节点重新执行一次

查看加入状态

kubectl get node

centos7 一键安装mysql centos7 一键安装k8s_kubernetes_12

三、 安装Dashboard(v2.0.5)

3.1 安装Dashboard

# 下载配置文件
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.5/aio/deploy/recommended.yaml

添加暴露端口

centos7 一键安装mysql centos7 一键安装k8s_centos7 一键安装mysql_13

修改好的yaml文件https://pan.baidu.com/s/1sd_1GYiQWcXbiWPpu13uZA?pwd=6666

如果1.5没有清空iptables,需要做如下配置(所有服务器都要执行)

# 如果1.5没有置空iptables,需要设置
iptables-save > iptables.rules

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -F

安装dashboard 

# 执行安装
kubectl apply -f recommended.yaml

# 查看安装情况
kubectl get po,svc -n kubernetes-dashboard

centos7 一键安装mysql centos7 一键安装k8s_centos7 一键安装mysql_14

 3.2、添加管理员账户

 创建dashboard-admin.yaml

cat > dashboard-admin.yaml << EOF
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: admin
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin
  namespace: kube-system
  labels:
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
EOF

 创建登录用户

kubectl apply -f dashboard-admin.yaml

查看创建的用户

kubectl -n kube-system get secret|grep admin-token

centos7 一键安装mysql centos7 一键安装k8s_centos_15

 查看token

# 查看所有信息
kubectl -n kube-system describe secret admin-token-jjhbw

# 直接查看token
kubectl -n kube-system get secret admin-token-jjhbw -o jsonpath={.data.token}|base64 -d

centos7 一键安装mysql centos7 一键安装k8s_kubernetes_16

Over