kubernetes是使用go语言开发的一个可移植的、可拓展的开源平台。主要用于管理容器;可以使用促进声明式配置和自动化。kubernetes有一个非常庞大的生态环境。它的服务、工具被广泛运用。
kubernetes是一个全新的基于容器技术的分布式领先方案,简称:K8S。 它是Google开源的容器集群管理系统,它的设计灵感来自于Google内部的一个叫作Borg的容器管理系统,继承了google十余年的容器集群使用经验。它为容器化的应用提供了部署运行、资源调度、服务发现和动态伸缩等一些列完整的功能,极大地提高了大规模容器集群管理的便捷性。
在kubernetes中,有两个角色,分别是:Master节点和Worker节点。
1、kubeadm方式部署k8s
通常部署k8s有两种方式,分别是:自动化工具安装、二进制安装。
1、部署的系统
| 软件 | 配置/版本 |
|---|---|
| CentOS 7.5 | 7.5 2核4G |
| Docker | 19 |
| kubernets | v1.20.5 |
2、节点规划
| Hostname | IP | 内核版本 |
|---|---|---|
| k8s-m-01 | 172.17.0.51 | 4.4 |
| k8s-w-01 | 172.17.0.52 | 4.4 |
| k8s-w-02 | 172.17.0.53 | 4.4 |
3、集群免密
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.51ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.52ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.53
4、关闭Selinux
# 永久关闭sed -i 's#enforcing#disabled#g' /etc/selinux/config# 零时关闭setenforce 0
5、关闭Swap分区
swapoff -ased -i.bak 's/^.*centos-swap/#&/g' /etc/fstabecho 'KUBELET_EXTRA_ARGS="--fail-swap-on=false"' > /etc/sysconfig/kubelet
6、配置国内的yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repocat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOFsetenforce 0yum makecacheyum update -y --exclud=kernel*
7、更换系统内核
wget http://106.13.81.75/kernel-lt-4.4.233-1.el7.elrepo.x86_64.rpmwget http://106.13.81.75/kernel-lt-devel-4.4.233-1.el7.elrepo.x86_64.rpmyum localinstall -y kernel-lt*grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfggrubby --default-kernel# 重启reboot
8、设置内核参数
cat > /etc/sysctl.d/k8s.conf << EOFnet.ipv4.ip_forward = 1net.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1fs.may_detach_mounts = 1vm.overcommit_memory=1vm.panic_on_oom=0fs.inotify.max_user_watches=89100fs.file-max=52706963fs.nr_open=52706963net.ipv4.tcp_keepalive_time = 600net.ipv4.tcp.keepaliv.probes = 3net.ipv4.tcp_keepalive_intvl = 15net.ipv4.tcp.max_tw_buckets = 36000net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp.max_orphans = 327680net.ipv4.tcp_orphan_retries = 3net.ipv4.tcp_syncookies = 1net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.ip_conntrack_max = 65536net.ipv4.tcp_max_syn_backlog = 16384net.ipv4.top_timestamps = 0net.core.somaxconn = 16384EOF# 立即生效sysctl --system
9、安装基础软件
yum install wget expect vim net-tools ntp bash-completion ipvsadm ipset jq iptables conntrack sysstat libseccomp -y
10、关闭防火墙
systemctl disable --now firewalld
11、安装Docker
# step 1: 安装必要的一些系统工具sudo yum install -y yum-utils device-mapper-persistent-data lvm2# Step 2: 添加软件源信息sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# Step 3sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo# Step 4: 更新并安装Docker-CEsudo yum makecache fast# Step 5: 安装dockeryum install docker-ce-19.03.12 -y# Step 6 : 启动Dockersystemctl enable --now docker
12、同步集群信息
yum install ntp -yln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeecho 'Asia/Shanghai' > /etc/timezonentpdate time2.aliyun.com# 写入定时任务*/1 * * * * ntpdate time2.aliyun.com > /dev/null 2>&1
13、部署kubernetes
cat <<EOF > /etc/yum.repos.d/kubernetes.repo[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOFsetenforce 0yum install -y kubelet-1.20.5 kubeadm-1.20.5 kubectl-1.20.5 -ysystemctl enable --now kubelet
14、修改hostname
hostnamectl set-hostname k8s-m-01
hostnamectl set-hostname k8s-w-01
hostnamectl set-hostname k8s-w-02
172.17.0.51 k8s-m-01
172.17.0.52 k8s-w-01
172.17.0.53 k8s-w-01
15、初始化Master节点
只在Master节点上运行。
kubeadm init \
--image-repository=registry.cn-hangzhou.aliyuncs.com/k8sos \
--kubernetes-version=v1.20.5 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
--image-repository : 指定下载镜像的仓库
--kubernetes-version : k8s的版本号
--service-cidr:service的网段
--pod-network-cidr : pod的网段
# 安装k8s命令提示
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
16、部署Pod网络
只在Master节点上运行。
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
17、验证Master节点初始化是否成功
[root@k8s-m-01 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-f68b4c98f-ncckf 1/1 Running 0 4m49s
coredns-f68b4c98f-z447z 1/1 Running 0 4m49s
etcd-k8s-m-01 1/1 Running 0 5m6s
kube-apiserver-k8s-m-01 1/1 Running 0 5m6s
kube-controller-manager-k8s-m-01 1/1 Running 0 5m6s
kube-flannel-ds-x8cq5 1/1 Running 0 110s
kube-proxy-mxdvp 1/1 Running 0 4m50s
kube-scheduler-k8s-m-01 1/1 Running 0 5m6s
18、将Worker节点加入集群
在这Worker节点上运行。
# Step 1 : 在Master节点上创建接入Token
[root@k8s-m-01 ~]# kubeadm token create --print-join-command
kubeadm join 172.17.0.51:6443 --token kcjpmf.tnuvwh8rmc7gvdv7 --discovery-token-ca-cert-hash sha256:c4c2d23271607e5254f8677f3ae9912b08f52c32757b404f050fe7c34f60e1a0
# Step 2 : 在Node节点上运行该命令加入集群
[root@k8s-w-01 ~]# kubeadm join 172.17.0.51:6443 --token kcjpmf.tnuvwh8rmc7gvdv7 --discovery-token-ca-cert-hash sha256:c4c2d23271607e5254f8677f3ae9912b08f52c32757b404f050fe7c34f60e1a0
[root@k8s-w-02 ~]# kubeadm join 172.17.0.51:6443 --token kcjpmf.tnuvwh8rmc7gvdv7 --discovery-token-ca-cert-hash sha256:c4c2d23271607e5254f8677f3ae9912b08f52c32757b404f050fe7c34f60e1a0
19、验证集群
[root@k8s-m-01 ~]# kubectl run --rm test -it --image=busybox:1.28.3
If you don't see a command prompt, try pressing enter.
/ # nslookup kubernetes
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
