Kubeadm部署高可用K8S集群

  • 8.Dashboard部署

1. 设备清单

=================================================================

因为条件问题本次实验只准备了三台虚拟机。两台master节点,一台node节点。

同时高可用部署也是在两台master节点上进行。

有条件的可以自行把环境扩到5台多master节点多node节点,甚至可以7台把高可用单独分出来,部署过程不会有影响。

| 设备 | IP |

| — | — |

| k8s-master01 | 192.168.1.3 |

| k8s-master02 | 192.168.1.4 |

| k8s-node01 | 192.168.1.3 |

| vip | 192.168.1.100 |

2. 初始环境准备

===================================================================

(所有节点都要进行的操作:)

2.1 主机名解析


[root@k8s-master01 ~]# cat /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.1.3 k8s-master01

192.168.1.4 k8s-master02

192.168.1.5 k8s-node01

2.2 关闭防火墙及SElinux


[root@k8s-master01 ~]# systemctl stop firewall && systemctl disable firewall

[root@k8s-master01 ~]# setenforce 0

setenforce: SELinux is disabled

[root@k8s-master01 ~]# cat /etc/sysconfig/selinux

SELINUX=disabled

2.3 关闭NetworkManager


[root@k8s-master01 ~]# systemctl disable --now NetworkManager

[root@k8s-master01 ~]# systemctl restart network

[root@k8s-master01 ~]# ping www.baidu.com

#确定网络是通的

2.4 进行时间同步


[root@k8s-master01 ~]# ntpdate ntp.aliyun.com

2.5 升级系统(可选,我没做)命令如下:


yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 –y

yum update -y --exclude=kernel* && reboot

2.6 升级内核


[root@k8s-master01 ~]# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

[root@k8s-master01 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

获取http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

获取http://elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

准备中… ################################# [100%]

正在升级/安装…

1:elrepo-release-7.0-4.el7.elrepo ################################# [100%]

[root@k8s-master01 ~]# yum --enablerepo=elrepo-kernel install kernel-ml kernel-ml-devel –y

[root@k8s-master01 ~]# grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg && grubby --args=“user_namespace.enable=1” --update-kernel=“$(grubby --default-kernel)” && reboot

[root@k8s-master01 ~]# uname -r

5.8.8-1.el7.elrepo.x86_64

2.7 设置安装源


2.7.1 设置k8s源

[root@k8s-master01 ~]# cat < /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

2.7.2 设置docker源

[root@k8s-master01 ~]# yum install -y yum-utils device-mapper-persistent-data lvm2

[root@k8s-master01 ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

已加载插件:fastestmirror

adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo

repo saved to /etc/yum.repos.d/docker-ce.repo

[root@k8s-master01 ~]# yum makecache fast

2.8 安装ipvs模块


[root@k8s-master01 ~]# yum install ipvsadm ipset sysstat conntrack libseccomp –y

[root@k8s-master01 ~]# vim /etc/modules-load.d/ipvs.conf

[root@k8s-master01 ~]# cat /etc/modules-load.d/ipvs.conf

ip_vs

ip_vs_rr

ip_vs_wrr

ip_vs_sh

nf_conntrack

ip_tables

ip_set

xt_set

ipt_set

ipt_rpfilter

ipt_REJECT

ipip

[root@k8s-master01 ~]# systemctl enable --now systemd-modules-load.service

2.9 修改内核参数


[root@k8s-master01 ~]# cat < /etc/sysctl.d/k8s.conf

net.ipv4.ip_forward = 1

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

fs.may_detach_mounts = 1

vm.overcommit_memory=1

vm.panic_on_oom=0

fs.inotify.max_user_watches=89100

fs.file-max=52706963

fs.nr_open=52706963

net.netfilter.nf_conntrack_max=2310720

net.ipv4.tcp_keepalive_time = 600

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_intvl =15

net.ipv4.tcp_max_tw_buckets = 36000

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_max_orphans = 327680

net.ipv4.tcp_orphan_retries = 3

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.ip_conntrack_max = 65536

net.ipv4.tcp_max_syn_backlog = 16384

net.ipv4.tcp_timestamps = 0

net.core.somaxconn = 16384

EOF

[root@k8s-master01 ~]# sysctl --system

2.10 关闭swap分区


[root@k8s-master01 ~]# swapoff -a

[root@k8s-master01 ~]# vim /etc/fstab

[root@k8s-master01 ~]# cat /etc/fstab

#/dev/mapper/centos-swap swap swap defaults 0 0

2.11 master01节点免密登录其他节点


[root@k8s-master01 ~]# ssh-keygen -t rsa

[root@k8s-master01 ~]# for i in k8s-master01 k8s-master02 k8s-node01;do ssh-copy-id -i .ssh/id_rsa.pub $i;done

2.12 配置limit


[root@k8s-master01 ~]# ulimit -SHn 65535

3 安装基本组件

=================================================================

(所有节点都要安装:)

3.1 安装containerd


[root@k8s-master01 ~]# wget https://download.docker.com/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm

[root@k8s-master01 ~]# yum -y install containerd.io-1.2.13-3.2.el7.x86_64.rpm

3.2 安装k8s组件


[root@k8s-master01 ~]# yum -y install kubeadm kubelet kubectl --disableexcludes=kubernetes

已安装:

kubeadm.x86_64 0:1.19.1-0 kubectl.x86_64 0:1.19.1-0 kubelet.x86_64 0:1.19.1-0

作为依赖被安装:

cri-tools.x86_64 0:1.13.0-0 kubernetes-cni.x86_64 0:0.8.7-0

socat.x86_64 0:1.7.3.2-2.el7

[root@k8s-master01 ~]# systemctl enable --now kubelet

3.3 安装docker


[root@k8s-master01 ~]# yum -y install docker-ce

已安装:

docker-ce.x86_64 3:19.03.12-3.el7

[root@k8s-master01 ~]# systemctl start docker && systemctl enable docker

[root@k8s-master01 ~]# vim /etc/docker/daemon.json

[root@k8s-master01 ~]# cat /etc/docker/daemon.json

{

“exec-opts”: [“native.cgroupdriver=systemd”],

“registry-mirrors”:[“https://655dds7u.mirror.aliyuncs.com”]

}

[root@k8s-master01 ~]# systemctl restart docker

3.4 配置kubelet使用阿里云的pause镜像


[root@k8s-master01 ~]# cat >/etc/sysconfig/kubelet<<EOF

KUBELET_EXTRA_ARGS=“–cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1”

EOF

4. 安装高可用组件

====================================================================

(所有master节点安装:)

4.1 安装HAproxy和keepalived服务


[root@k8s-master01 ~]# yum install keepalived haproxy –y

已安装:

haproxy.x86_64 0:1.5.18-9.el7 keepalived.x86_64 0:1.3.5-16.el7

4.2 修改haproxy配置文件


(所有master节点配置相同:)

[root@k8s-master01 ~]# cd /etc/haproxy/

[root@k8s-master01 haproxy]# cp haproxy.cfg haproxy.cfg.bak

[root@k8s-master01 haproxy]# vim haproxy.cfg

[root@k8s-master01 haproxy]# cat haproxy.cfg

global

maxconn 2000

ulimit-n 16384

log 127.0.0.1 local0 err

stats timeout 30s

defaults

log global

mode http

option httplog

timeout connect 5000

timeout client 50000

timeout server 50000

timeout http-request 15s

timeout http-keep-alive 15s

frontend monitor-in

bind *:33305

mode http

option httplog

monitor-uri /monitor

listen stats

bind *:8006

mode http

stats enable

stats hide-version

stats uri /stats

stats refresh 30s

stats realm Haproxy\ Statistics

stats auth admin:admin

frontend k8s-master

bind 0.0.0.0:16443

bind 127.0.0.1:16443

mode tcp

option tcplog

tcp-request inspect-delay 5s

default_backend k8s-master

backend k8s-master

mode tcp

option tcplog

option tcp-check

balance roundrobin

default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100

server master01 192.168.1.3:6443 check

server master02 192.168.1.4:6443 check

4.3 修改keepalived配置文件


4.3.1 修改master01配置文件

[root@k8s-master01 ~]# cd /etc/keepalived/

[root@k8s-master01 keepalived]# cp keepalived.conf keepalived.conf.bak

[root@k8s-master01 keepalived]# vim keepalived.conf

[root@k8s-master01 keepalived]# cat keepalived.conf

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL

}

vrrp_script chk_apiserver {

script “/etc/keepalived/check_apiserver.sh”

interval 2

weight -5

fall 3

rise 2

}

vrrp_instance VI_1 {

state MASTER

interface eth0

mcast_src_ip 192.168.1.3

virtual_router_id 51

priority 150

advert_int 2

authentication {

auth_type PASS

auth_pass K8SHA_KA_AUTH

}

virtual_ipaddress {

192.168.1.100/24

}

track_script {

chk_apiserver

}

4.3.2 修改master02配置文件

[root@k8s-master02 ~]# cd /etc/keepalived/

[root@k8s-master02 keepalived]# cp keepalived.conf keepalived.conf.bak

[root@k8s-master02 keepalived]# vim keepalived.conf

[root@k8s-master02 keepalived]# cat keepalived.conf

! Configuration File for keepalived

global_defs {

router_id LVS_DEVEL

}

vrrp_script chk_apiserver {

script “/etc/keepalived/check_apiserver.sh”

interval 2

weight -5

fall 3

rise 2

}

vrrp_instance VI_1 {

state BACKUP

interface eth0

mcast_src_ip 192.168.1.4

virtual_router_id 51

priority 100

advert_int 2

authentication {

auth_type PASS

auth_pass K8SHA_KA_AUTH

}

virtual_ipaddress {

192.168.1.100/24

}

track_script {

chk_apiserver

}

}

4.4 创建健康检查脚本


(所有master节点:)

[root@k8s-master01 ~]# vim /etc/keepalived/check_apiserver.sh

[root@k8s-master01 ~]# cat /etc/keepalived/check_apiserver.sh

#!/bin/bash

err=0

for k in $(seq 1 5)

do

check_code=$(pgrep kube-apiserver)

if [[ $check_code == “” ]]; then

err=$(expr $err + 1)

sleep 5

continue

else

err=0

break

fi

done

if [[ $err != “0” ]]; then

echo “systemctl stop keepalived”

/usr/bin/systemctl stop keepalived

exit 1

else

exit 0

fi

4.5 启动haproxy和keepalived服务


[root@k8s-master01 ~]# systemctl start haproxy

[root@k8s-master01 ~]# systemctl enable haproxy

[root@k8s-master01 ~]# systemctl start keepalived

[root@k8s-master01 ~]# systemctl enable keepalived

5 部署k8s集群

==================================================================

5.1 获取初始化文件并修改


(所有master节点:)

[root@k8s-master01 ~]# kubeadm config print init-defaults > init.default.yaml

[root@k8s-master01 ~]# vim init.default.yaml

[root@k8s-master01 ~]# cat init.default.yaml

apiVersion: kubeadm.k8s.io/v1beta2

bootstrapTokens:

  • groups:

  • system:bootstrappers:kubeadm:default-node-token

token: abcdef.0123456789abcdef

ttl: 24h0m0s

usages:

  • signing

  • authentication

kind: InitConfiguration

localAPIEndpoint:

advertiseAddress: 192.168.1.3

bindPort: 6443

nodeRegistration:

criSocket: /var/run/dockershim.sock

name: k8s-master01

taints:

  • effect: NoSchedule

key: node-role.kubernetes.io/master


apiServer:

certSANs:

  • 192.168.1.100

timeoutForControlPlane: 4m0s

apiVersion: kubeadm.k8s.io/v1beta2

certificatesDir: /etc/kubernetes/pki

clusterName: kubernetes

controlPlaneEndpoint: 192.168.1.100:16443

controllerManager: {}

最后的内容

在开头跟大家分享的时候我就说,面试我是没有做好准备的,全靠平时的积累,确实有点临时抱佛脚了,以至于我自己还是挺懊恼的。(准备好了或许可以拿个40k,没做准备只有30k+,你们懂那种感觉吗)

如何准备面试?

1、前期铺垫(技术沉积)

程序员面试其实是对于技术的一次摸底考试,你的技术牛逼,那你就是大爷。大厂对于技术的要求主要体现在:基础,原理,深入研究源码,广度,实战五个方面,也只有将原理理论结合实战才能把技术点吃透。

下面是我会看的一些资料笔记,希望能帮助大家由浅入深,由点到面的学习Java,应对大厂面试官的灵魂追问

这部分内容过多,小编只贴出部分内容展示给大家了,见谅见谅!

  • Java程序员必看《Java开发核心笔记(华山版)》

  • Redis学习笔记

  • Java并发编程学习笔记

四部分,详细拆分并发编程——并发编程+模式篇+应用篇+原理篇

  • Java程序员必看书籍《深入理解 ava虚拟机第3版》(pdf版)

  • 大厂面试必问——数据结构与算法汇集笔记

其他像Spring,SpringBoot,SpringCloud,SpringCloudAlibaba,Dubbo,Zookeeper,Kafka,RocketMQ,RabbitMQ,Netty,MySQL,Docker,K8s等等我都整理好,这里就不一一展示了。

2、狂刷面试题

技术主要是体现在平时的积累实用,面试前准备两个月的时间再好好复习一遍,紧接着就可以刷面试题了,下面这些面试题都是小编精心整理的,贴给大家看看。

①大厂高频45道笔试题(智商题)

②BAT大厂面试总结(部分内容截图)

③面试总结

3、结合实际,修改简历

程序员的简历一定要多下一些功夫,尤其是对一些字眼要再三斟酌,如“精通、熟悉、了解”这三者的区别一定要区分清楚,否则就是在给自己挖坑了。当然不会包装,我可以将我的简历给你参考参考,如果还不够,那下面这些简历模板任你挑选:

以上分享,希望大家可以在金三银四跳槽季找到一份好工作,但千万也记住,技术一定是平时工作种累计或者自学(或报班跟着老师学)通过实战累计的,千万不要临时抱佛脚。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。
存中…(img-mcR3NSKf-1716216829112)]

  • Java程序员必看书籍《深入理解 ava虚拟机第3版》(pdf版)

[外链图片转存中…(img-AuI1Jj7s-1716216829112)]

  • 大厂面试必问——数据结构与算法汇集笔记

[外链图片转存中…(img-CLGw4Y8h-1716216829113)]

其他像Spring,SpringBoot,SpringCloud,SpringCloudAlibaba,Dubbo,Zookeeper,Kafka,RocketMQ,RabbitMQ,Netty,MySQL,Docker,K8s等等我都整理好,这里就不一一展示了。

[外链图片转存中…(img-VjdzhAJO-1716216829113)]

2、狂刷面试题

技术主要是体现在平时的积累实用,面试前准备两个月的时间再好好复习一遍,紧接着就可以刷面试题了,下面这些面试题都是小编精心整理的,贴给大家看看。

①大厂高频45道笔试题(智商题)

[外链图片转存中…(img-7i15T6BR-1716216829113)]

②BAT大厂面试总结(部分内容截图)

[外链图片转存中…(img-Vta6qZ3X-1716216829113)]

[外链图片转存中…(img-l57m24AF-1716216829114)]

③面试总结

[外链图片转存中…(img-WIPZi3rg-1716216829114)]

[外链图片转存中…(img-ubQEuDiw-1716216829114)]

3、结合实际,修改简历

程序员的简历一定要多下一些功夫,尤其是对一些字眼要再三斟酌,如“精通、熟悉、了解”这三者的区别一定要区分清楚,否则就是在给自己挖坑了。当然不会包装,我可以将我的简历给你参考参考,如果还不够,那下面这些简历模板任你挑选:

[外链图片转存中…(img-0vg9TlnB-1716216829114)]

以上分享,希望大家可以在金三银四跳槽季找到一份好工作,但千万也记住,技术一定是平时工作种累计或者自学(或报班跟着老师学)通过实战累计的,千万不要临时抱佛脚。

另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值