https://youdianzhishi.com/web/course/1004/1019

https://www.qikqiak.com/post/manual-install-high-available-kubernetes-cluster/

1.安装要求

  • 一台或多台机器,操作系统为centos8.x-86 -64
  • 至少2G2核
  • 集群网络互通
  • 可以访问外网
  • 禁止swap分区

2.准备环境

角色IP
master172.25.250.100
node1172.25.250.101
node2172.25.250.102

关闭防火墙:firewalld与iptables互斥。一个是白名单一个是黑名单,k8s使用了iptables做流量转发,所以关闭。

systemctl stop firewalld.service
systemctl disable firewalld.service

关闭selinux: #用来加强安全性的一个组件,但非常容易出错难以定位,一般装完系统就先禁用了

sudo setenforce 0 #临时关闭
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config 

关闭swap分区:#当内存不足时,linux会自动使用swap,将部分数据存储放到磁盘中,这样会使性能下降,为了性能考虑推荐关掉

swapoff -a
vim /etc/fstab #注释掉swap

设置主机名:

hostnamectl set-hostname  <hostname>

在master添加hosts: #在master上执行,方便master与其他主机通信

[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.250.100 master
172.25.250.101 node1
172.25.250.102 node2

允许 iptables 检查桥接流量:#确保 br_netfilter 模块被加载,为了让Linux 节点上的 iptables 能够正确地查看桥接流量

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system

时间同步:(k8s涉及证书,证书对时间很敏感)

yum install -y chrony
chronyc sources -v time.windows.com

3.安装Docker/kubeadm/kubelet(所有节点)

3.1 安装docekr
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker

配置镜像加速器:(此处代码可能复制不了,手打或者去阿里云控制台复制)

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mcxfjzdt.mirror.aliyuncs.com"]
}
EOF
3.2 添加k8s阿里云Yum源
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=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
EOF
3.3 安装kubelet kubeadm kubectl(此安装为客户端)
  • kubeadm是一个工具
  • kubelet是node节点上的一个组件

安装1.23.0版本的k8s客户端

yum install -y kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet  #此时不能启动,因为k8s还没有对应的配置文件,在初始化时才会生成

将docker的启动引擎cgroupfs驱动改为修改为systemd与kuberlet一致: (docker默认cgroup的驱动是cgroupfs,而k8s的cgroup驱动是systemd,k8s只是一个平台,需要与容器引擎驱动一致)

"exec-opts": ["native.cgroupdriver=systemd"]

重启docker让配置文件生效:

systemctl daemon-reload
systemctl restart docker

4.部署k8s Master

初始化master节点的k8s上执行: (初始化也叫清空格式化集群配置)

kubeadm init --apiserver-advertise-address 172.25.250.10 --pod-network-cidr 10.244.0.0/16 --service-cidr 10.245.0.0/16  --kubernetes-version v1.23.0 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers

然后执行:

  • –apiserver-advertise-address 集群通告地址,与node节点上通信的地址
  • –pod-network-cidr pod网络,与下面网络插件yaml中保持一致
  • –service-cidr 集群内部网络访问地址
  • –image-repository 由于默认拉取镜像地址k8s.grc.io国内无法无法访问,这里指定一般手动指定国内仓库
  • –kubernetes-version k8s服务端版本与上面一致kubeadm、kubelet、kubectl(客户端)一致,我们指定了版本后就在google仓库会为我们拉取与客户端版本相同的镜像

根据提示普通用户执行:

mkdir -p $HOME/.kube #创建一个家目录
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config #拷贝一个文件到家目录里(该文件相当于管理员文件,拥有此文件即可使用kubectl) 
sudo chown $(id -u):$(id -g) $HOME/.kube/config #给文件赋予一个权限,

如果是root用户也可以执行:

export KUBECONFIG=/etc/kubernetes/admin.conf #整体设置一个环境变量

2种方式都是为了连接k8s集群

补充: k8s初始化做了哪些工作???

  1. [preflight] 环境检查和拉取master节点所需镜像

  2. [certs] 创建证书目录/etc/kubernetes/pki,并生成证书

  3. [kubeconfig] 创建连接apiserver的配置文件目录/etc/kubernetes

  4. [kubelet-start] 生成k8s配置文件/var/lib/kubelet/kubeadm-flags.env 和启动k8s,前面没有启动就是这原因,如果没有此文件是启动不了的

  5. [control-plane] 使用静态pod启动master组件/etc/kubernetes/manifests

  6. [upload-config] [kubelet] [upload-certs] 使用ConfigMap存储k8s配置文件,上传配置文件,上传组件

  7. [mark-control-plane] 给master节点添加标签

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CH27D8TX-1648302711356)(file:///C:\Users\86173\AppData\Roaming\Tencent\Users\2022678574\QQ\WinTemp\RichOle{%YY5HUJS7CC14E5`3ZO7SD.png)]

  8. [bootstrap-token] k8s自动生成证书机制

  9. [addons] 安装插件CoreDNS、kube-proxy

5.部署node节点

在所有node上执行:

kubeadm join <token*****>

node做了哪些事???

  1. [preflight] 环境检查
  2. [kubelet-start] 生成k8s配置文件并启动k8s

node在加入master时自动拉取master中需要的2个组件镜像

6.安装pod网络

部署calico组件:

  • curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O 
    

    修改yaml文件:ip改为master节点初始化pod网络相同的网段

    ......
    4219             # The default IPv4 pool to create on startup if none exists. Pod IPs will be
    4220             # chosen from this range. Changing this value after installation will have
    4221             # no effect. This should fall within `--cluster-cidr`.
    4222             # - name: CALICO_IPV4POOL_CIDR
    4223     #看这行     value: "10.244.0.0/16"   
    4224             # Disable file logging so `kubectl logs` works.
    4225             - name: CALICO_DISABLE_FILE_LOGGING
    4226               value: "true"
    4227             # Set Felix endpoint to host default action to ACCEPT.
    4228             - name: FELIX_DEFAULTENDPOINTTOHOSTACTION
    4229               value: "ACCEPT"
    ......
    
  • kubectl apply -f calico.yaml
    

7.测试k8s集群

  • 命令行部署一个deployment下一个web服务

    kubectl create deployment web --image=nginx
    
  • 查看连通信

    img

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2lttQfIa-1648302711357)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302204710535.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gpEKKb1n-1648302711357)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302204739445.png)]

  • 查看service网络能否通信

    • kubectl expose deployment web --port 80 --target-port 80 --type NodePort 
      

      通过浏览器访问:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1GojHDKa-1648302711358)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302205003472.png)]

8.部署Dashboard

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml #无法下载可以使用迅雷下载到win10拖进去

默认Dashboard只能集群内部访问,修改service为NodePort类型,暴露到外部


 32 kind: Service
 33 apiVersion: v1
 34 metadata:
 35   labels:
 36     k8s-app: kubernetes-dashboard
 37   name: kubernetes-dashboard
 38   namespace: kubernetes-dashboard
 39 spec:
 <u>**40**</u>   **<u>type: NodePort</u>**
 41   ports:
 42     - port: 443
 43       targetPort: 8443
 **<u>44</u>**       **<u>nodePort: 30001</u>**
 45   selector:
 46     k8s-app: kubernetes-dashboard

发布该文件:

kubectl apply -f kubernetes-dashboard.yaml

使用浏览器访问:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMKGkJaA-1648302711358)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302211544396.png)]

因为Dashboard默认使用https访问的

接着用https访问:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rpx4lGiH-1648302711358)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302211802483.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KxRsudOg-1648302711359)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302211847632.png)]

接下来使用token登录:

  • 创建token

    • 创建用户:kubectl create serviceaccount dashboard-admin -n kube-system

    • 用户授权:kubectl create rolebinding dashboard-admin -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

    • 获取用户token:

      • 查看secret:kubectl get secret -n kube-system
      • 获取token:kubectl describe secret dashboard-admin-token-vbzw6 -n kube-system

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DBE3xQ9h-1648302711359)(C:\Users\86173\AppData\Roaming\Typora\typora-user-images\image-20220302213735476.png)]

  • 密码就是这个长串字母

这里建议使用国产化kuboard

操作比较简单,也更方便使用,dashboard安装后会出现报错无法访问:

kuboard安装步骤在官网上:https://www.kuboard.cn/install/v3/install-in-k8s.html

source命令作用

在当前bash环境下读取并执行FileName中的命令。

*注:该命令通常用命令“.”来替代。

查看pod日志:

kubectl logs  <podname>  -n <namespace>

查看pod具体创建流程:

kubectl describe pod  <podname>

以上两种可以在报错时可以分析具体报错问题

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐