长按1. 需求分析
1.1 选择安装方式
1.minikube
2.使用kubeadm 是k8s官方推荐的安装k8s的方式 (推荐)
3.二进制安装
4.第3方的部署工具:rancher等
今天我们选择比较具有实用性的kubeadm的方式进行k8s的安装和部署。
1.2 集群的架构
1.单master多node
2.多master多node ——高可用( 3个master 3个node 1台负载均衡(nginx))
介于个人的硬件配置限制,今天进行第1种架构,希望以后有机会有能力和资源,我再来玩第二种架构。
1.3 实验环境
软件:CentOS 7.9 、Docker
硬件:2G/2C
1个master,2个node
2. 详细安装步骤(每台机器都要做!)
2.1 准备好三台虚拟机
1.重新创建虚拟机(可以先创建一台,再以此克隆两台,注意改名字)
2.配置静态ip
配置ip地址:vi etc/sysconfig/network-scripts/ifcfg-ens33
配置好后,刷新网络服务:service network restart
3.改名字
hostnamectl set-hostname xxx
su - root
xxx:名字
su - root:重新登陆,切换刷新名字
jdmaster 192.168.1.7
jdnode-1 192.168.1.8
jdnode-2 192.168.1.9
使用固定的ip地址,防止后面因为ip地址的变化,导致整个集群异常。
2.2 关闭selinux和firewalld
1.这些步骤三台机器都是相同的,所以用XShell登入后,用一个工具,提高我们的操作效率(只需要在一台机器输入指令即可使三台机器执行相关指令)
2.关闭selinux和firewalld:
(1).永久关闭selinux:
vim etc/selinux/config
SELINUX=disabled
(2).临时关闭selinux
setenforce 0
(3).关闭防火墙:
service firewalld stop
systemctl disable firewalld
(4).顺便升级下所有的能升级的软件,提高系统的安全性
yum update -y
2.3 安装Docker
1.安装yum相关的工具,下载docker-ce.repo文件,执行以下命令
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils -y
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
2.安装docker-ce软件
执行:
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y
小讲解:
container engine 容器引擎
docker是一个容器管理的软件
docker-ce 是服务器端软件 server
docker-ce-cli 是客户端软件 client
docker-compose-plugin是compose插件,用来批量启动很多容器,在单台机器上 containerd.io 底层用来启动容器的
3.检查安装是否成功
[root@jdmaster ~]# docker version
Client: Docker Engine - Community
Version: 23.0.1
API version: 1.42
Go version: go1.19.5
Git commit: a5ee5b1
Built: Thu Feb 9 19:51:00 2023
OS/Arch: linux/amd64
Context: default
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
4.启动docker服务
启动:
systemctl start docker
通过查看进程,看看是否启动成功:
[root@jdmaster ~]# ps aux|grep docker
root 32922 0.1 2.6 1101972 50000 ? Ssl 15:39 0:00 usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 33051 0.0 0.0 112824 984 pts/0 S+ 15:41 0:00 grep --color=auto docker
5.设置docker服务开机启动
[root@jdmaster ~]# systemctl enable docker
Created symlink from etc/systemd/system/multi-user.target.wants/docker.service to usr/lib/systemd/system/docker.service.
2.4 配置Docker使用systemd作为默认Cgroup驱动
每台服务器上都要操作,master和node上都要操作执行下面的脚本,会产生 etc/docker/daemon.json文件。
执行:
cat <<EOF > etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
重启docker:
[rootjdnode-1 ~]# systemctl restart docker
查看:
[root@jdnode-1 ~]# cd etc/docker
[root@jdnode-1 docker]# ls
daemon.json
2.5 关闭swap分区
因为k8s不想使用swap分区来存储数据,使用swap会降低性能。
swapoff -a # 临时关闭
执行:
永久修改:
方法1:
sed -i '/ swap s/^\(.*\)$/#\1/g' etc/fstab
方法2:修改/etc/fstab,把SWAP那一行注释即可。
2.6 修改hosts文件
执行:
cat >> etc/hosts << EOF
192.168.1.7 jdmaster
192.168.1.8 jdnode-1
192.168.1.9 jdnode-2
EOF
[root@jdmaster docker]# cat etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.7 jdmaster
192.168.1.8 jdnode-1
192.168.1.9 jdnode-2
2.7 修改内核参数
修改内核参数,每台机器上(master和node),永久修改 追加到内核会读取的参数文件里。
执行:
cat <<EOF >>/etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
让内核重新读取数据,加载生效
执行:
sysctl -p
2.8 安装kubeadm,kubelet和kubectl
集群里的每台服务器都需要安装。
kubeadm --》k8s的管理程序–》在master上运行的–》建立整个k8s集群,背后是执行了大量的脚本,帮助我们去启动k8s。
kubelet --》在node节点上用来管理容器的–》管理docker,告诉docker程序去启动容器。管理docker容器的,告诉docker程序去启动pod 一个在集群中每个节点(node)上运行的代理。它保证容器(containers)都 运行在 Pod 中。
kubectl–》在master上用来给node节点发号施令的程序,用来控制node节点的,告诉它们做什么事情的,是命令行操作的工具
2.8.1 添加kubernetes YUM软件源
执行:
cat > etc/yum.repos.d/kubernetes.repo << EOF
[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
2.8.2 安装并指定版本
最好指定版本,因为1.24的版本默认的容器运行时环境不是docker了。
yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6
2.8.3 设置开机自启
因为kubelet是k8s在node节点上的代理,必须开机要运行的。
systemctl enable kubelet
3. 部署Kubernetes Master
3.1 准备coredns:1.8.4的镜像
提前准备coredns:1.8.4的镜像,后面需要使用,需要在每台机器上下载镜像。
执行以下两条命令:
[root@jdmaster docker]# docker pull coredns/coredns:1.8.4
[root@jdmaster docker]# docker tag coredns/coredns:1.8.4 registry.aliyuncs.com/google_containers/coredns:v1.8.4
3.2 初始化
1.初始化操作只在master服务器上执行!!!
执行:
kubeadm init \
--apiserver-advertise-address=192.168.1.7 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
小讲解:
192.168.1.7 是master的ip。
–service-cidr string
(Use alternative range of IP address for service VIPs. )(default “10.96.0.0/12”) 服务发布暴露–》dnat
–pod-network-cidr string
( Specify range of IP addresses for the pod network. If set, the control plane will automatically allocate CIDRs for every node.)
2.完成初始化的新建文件和目录的操作,在master上完成。
耐心吧等几分钟,装好之后,按照提示:
执行这三条命令:
mkdir -p $HOME/.kube
sudo cp -i etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
[root@jdmaster docker]# mkdir -p $HOME/.kube
[root@jdmaster docker]# sudo cp -i etc/kubernetes/admin.conf $HOME/.kube/config
[root@jdmaster docker]# sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. node节点部署
1.测试node节点能否和master通信:
[root@jdnode-1 docker]# ping jdmaster
PING jdmaster (192.168.1.7) 56(84) bytes of data.
64 bytes from jdmaster (192.168.1.7): icmp_seq=1 ttl=64 time=1.00 ms
64 bytes from jdmaster (192.168.1.7): icmp_seq=2 ttl=64 time=1.59 ms
64 bytes from jdmaster (192.168.1.7): icmp_seq=3 ttl=64 time=1.87 ms
^C
--- jdmaster ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 1.005/1.492/1.875/0.365 ms
2.执行:
[root@jdnode-1 docker]# kubeadm join 192.168.1.7:6443 --token xv2cjr.d0win422go1bf2km \
> --discovery-token-ca-cert-hash sha256:7a2c5fcf9acd321a0bccd13333e3430004e158988b272b60459b1cf6ed48dea0
[preflight] Running pre-flight checks
[WARNING SystemVerification]: this Docker version is not on the list of validated versions: 23.0.1. Latest validated version: 20.10
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.





