Centos 7 安装部署 Kubernets环境 「版本V1.18.6」

文档参考:

https://blog.csdn.net/sehn_/article/details/107823058 部署Kubernetes集群-1.18.6版本

https://kubernetes.io/zh/docs/home/ kubernetes官网说明(中文)

https://www.kubernetes.org.cn/ kubernetes中文社区

 

效果

相关pod运行正常

image.png

dashboard正常

image.png

环境说明

注意:官方建议每台机器至少双核2G内存,同时需确保MAC和product_uuid唯一(参考下面的命令查看)

ip link
cat /sys/class/dmi/id/product_uuid

安装步骤

注意⚠️ 没有特殊说明,以下步骤三台节点都需要

0.前期准备

查阅很多博客,也有说需要关闭selinux的,但是需要重启机器使配置生效,公司的服务器无法随意重启,也问了其他同学,说不是必须的,就没有关闭,这个根据自己需求关闭,目前在安装过程中,没有出现问题。

(0)配置hosts

修改/etc/hosts

主机名 角色
kerberos01 master

kerberos03

node

kerberos03

node

 

(1)三台节点配置免密登陆

这部分内容比较简单,可自行百度操作,这里不做叙述;

(2)关闭防火墙

Centos 7 关闭防火墙的命令

systemctl stop firewalld && systemctl disable firewalld

(3)关闭swap分区

这个不是一定要关闭,但是处于对集群性能的考虑,还是建议关闭

swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

(4)设置内核参数

cat << EOF | tee /etc/sysctl.d/k8s.conf
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_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

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

 

1. 更新yum源,添加kubernetes相关源

# 更新yum源
yum update
# 安装相关依赖
yum install -y epel-release conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
# 配置kubernetes源
vim kubernetes.repo
# 内容如下
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
# 将kubernetes.repo 放入 /etc/yum.repos.d 路径
# 然后执行下面命令
yum clean all
yum -y makecache

2.安装docker

(1)卸载原始docker,确保三台节点docker版本一致

# 查看当前docker版本
yum list installed | grep docker
# 如果有,可以使用下面指令进行删除
yum -y remove xxxx(这里替换为对应的名称)
# 删除干净之后就可以安装docker,可以使用以下命令安装
yum install -y docker-ce docker-ce-cli containerd.io

(2)检查安装的docker 版本

docker version

image.png

(3)docker 配置阿里加速

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors   (我是在杭州,所以链接是这个,不同地方的同学请根据阿里云官网设置)

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxxx.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

(4)docker 开启开机自启

# 开启docker
systemctl start docker
# 开机自启动docker
systemctl enable docker

至此,docker的安装就完成了。

3.安装kubernetes相关

(1)安装相关内容

yum install -y kubelet kubeadm kubectl
systemctl enable --now kubelet

(2)安装命令自动补全工具

#安装bash自动补全插件
yum install bash-completion -y
#设置kubectl与kubeadm命令补全,下次login生效
kubectl completion bash > /etc/bash_completion.d/kubectl
kubeadm completion bash > /etc/bash_completion.d/kubeadm

(3)拉取相关docker镜像

因为一个一个拉比较繁琐,而且容易出错,所以写个自动化脚本 get_k8s_images.sh

#!/bin/bash
# Script For Quick Pull K8S Docker Images

KUBE_VERSION=v1.18.6
PAUSE_VERSION=3.2
CORE_DNS_VERSION=1.6.7
ETCD_VERSION=3.4.3-0

# pull kubernetes images from hub.docker.com
docker pull kubeimage/kube-proxy-amd64:$KUBE_VERSION
docker pull kubeimage/kube-controller-manager-amd64:$KUBE_VERSION
docker pull kubeimage/kube-apiserver-amd64:$KUBE_VERSION
docker pull kubeimage/kube-scheduler-amd64:$KUBE_VERSION
# pull aliyuncs mirror docker images
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION

# retag to k8s.gcr.io prefix
docker tag kubeimage/kube-proxy-amd64:$KUBE_VERSION  k8s.gcr.io/kube-proxy:$KUBE_VERSION
docker tag kubeimage/kube-controller-manager-amd64:$KUBE_VERSION k8s.gcr.io/kube-controller-manager:$KUBE_VERSION
docker tag kubeimage/kube-apiserver-amd64:$KUBE_VERSION k8s.gcr.io/kube-apiserver:$KUBE_VERSION
docker tag kubeimage/kube-scheduler-amd64:$KUBE_VERSION k8s.gcr.io/kube-scheduler:$KUBE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION k8s.gcr.io/pause:$PAUSE_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION k8s.gcr.io/coredns:$CORE_DNS_VERSION
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION k8s.gcr.io/etcd:$ETCD_VERSION

# untag origin tag, the images won't be delete.
docker rmi kubeimage/kube-proxy-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-controller-manager-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-apiserver-amd64:$KUBE_VERSION
docker rmi kubeimage/kube-scheduler-amd64:$KUBE_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:$PAUSE_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:$CORE_DNS_VERSION
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:$ETCD_VERSION

同时,别忘了拉取 kubernetes-dashboard-amd64 镜像

# 先看看有哪些dashboard镜像可用
docker search dashboard

image.png

最后选择了kubernetes-dashboard-amd64(别问我为啥,我也不知道,可能名字比较吸引我)

最后相关镜像如下:

image.png

4.配置kubernetes相关

如无特殊说明,以下步骤均在master节点操作

(1)kuberadm init 初始化集群

kubeadm init  --kubernetes-version=v1.18.6 --apiserver-advertise-address=(这里填你的master对应的host IP) --pod-network-cidr=10.244.0.0/16 --service-cidr=10.1.0.0/16

初始化之后会有相关提示,然后注意最后的输出,记录下<kubeadm join>相关内容

(2)配置kubectl

#把密钥配置加载到自己的环境变量里
export KUBECONFIG=/etc/kubernetes/admin.conf

#每次启动自动加载$HOME/.kube/config下的密钥配置文件(K8S自动加载)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

(3)配置集群网络环境

这个有多种选择方案,我这里选择的是使用calico网络

# 下载相关配置文件
wget https://docs.projectcalico.org/v3.15/manifests/calico.yaml
# 修改相关内容:CALICO_IPV4POOL_CIDR,改成上面👆 初始化时配置的pod-network-cidr
vim calico.yaml
# 修改完之后使配置文件生效
kubectl apply -f calico.yaml
# 查看所有的pod是否都处于running状态
kubectl get pod --all-namespaces -o wide

注意⚠️ 修改完之后一定要检查格式!因为yaml文件对格式非常严谨

(4)集群添加node

注意⚠️ 在node节点上运行之前记录的<kubeadm join>相关内容

# 如果没有记录,可以通过下面👇 的命令重新获取
kubeadm token create --print-join-command --ttl=0
# 在master节点查看集群节点状态,等待所有节点都为running状态
kubectl get nodes

image.png

如果节点的ROLES为<none>,可以使用下面👇 的命令添加

kubectl label nodes kerberos02  node-role.kubernetes.io/node=node
kubectl label nodes kerberos03  node-role.kubernetes.io/node=node

(5)kube-proxy 开启 ipvs

kubectl get configmap kube-proxy -n kube-system -o yaml > kube-proxy-configmap.yaml
sed -i 's/mode: ""/mode: "ipvs"/' kube-proxy-configmap.yaml
kubectl apply -f kube-proxy-configmap.yaml
rm -f kube-proxy-configmap.yaml
kubectl get pod -n kube-system | grep kube-proxy | awk '{system("kubectl delete pod "$1" -n kube-system")}'

5.部署kubernetes-dashboard

(1)配置 recommended.yaml 配置文件

# 首先获取官方配置
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta5/aio/deploy/recommended.yaml
# 因为需要修改一些配置,所以没有使用官方的 kubectl create -f 命令
# 修改 k8s-app: kubernetes-dashboard 的内容
---
#增加直接访问端口
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort # 增加,通过外部端口访问页面
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30008 # 增加,在 Kubernetes 集群中,NodePort 默认范围是 30000-32767
  selector:
    k8s-app: kubernetes-dashboard

---

注意⚠️ 修改完之后一定要检查格式!因为yaml文件对格式非常严谨

(2)配置证书

mkdir dashboard-certs
cd dashboard-certs/
#创建命名空间
kubectl create namespace kubernetes-dashboard     
## 删除命名空间kubectl delete namespace kubernetes-dashboard
# 创建私钥key文件
openssl genrsa -out dashboard.key 2048
#证书请求
openssl req -days 36000 -new -out dashboard.csr -key dashboard.key -subj '/CN=dashboard-cert'
#自签证书
openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt
#创建kubernetes-dashboard-certs对象
kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard

(3)创建dashboard管理员

# 创建账户
vim dashboard-admin.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: dashboard-admin
  namespace: kubernetes-dashboard
#保存退出后执行
kubectl create -f dashboard-admin.yaml

# 给用户分配相关权限
vim dashboard-admin-bind-cluster-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: dashboard-admin-bind-cluster-role
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: dashboard-admin
  namespace: kubernetes-dashboard
#保存退出后执行
kubectl create -f dashboard-admin-bind-cluster-role.yaml

(4)安装dashboard

# 安装
kubectl create -f  ~/recommended.yaml

# 检查结果
kubectl get pods -A  -o wide

(5)访问dashboard

# 查看并且复制用户的token
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep dashboard-admin | awk '{print $1}')
# 登陆https://kerberos01:30008,选择token登陆,粘贴上面👆复制的token即可

注意⚠️ 一定是 https,直接访问会出现 kubernetes dashboard Client sent an HTTP request to an HTTPS server. 问题

至此,kubernetes 集群部署完成!

其他说明<建议先看>

这里记录在安装过程中有需要的文章内容

1.修改NodePort的端口范围

在 Kubernetes 集群中,NodePort 默认范围是 30000-32767,某些情况下,因为您所在公司的网络策略限制,您可能需要修改 NodePort 的端口范围

可参考文档 https://kuboard.cn/install/install-node-port-range.html

2.chrome浏览器访问 https 网址出现 “连接不是私密连接” 问题

在chrome 该页面上直接通过键盘⌨️ 敲 "thisisunsafe" ,然后就可以访问了

3.重置 kubernetes 集群

在安装过程中难免会出现问题,需要对kubernetes集群进行重置,重新安装,可以使用 kubeadm reset 命令,然后根据命令提示删除并重置相关配置。

4.关于yaml

注意⚠️ 每次修改完yaml文件之后一定要检查格式!因为yaml文件对格式非常严谨!!!

 

 

posted @ 2020-09-25 19:42  铁柱大兄dei  阅读(209)  评论(0)    收藏  举报