kubernetes是使用go语言开发的一个可移植的、可拓展的开源平台。主要用于管理容器;可以使用促进声明式配置和自动化。kubernetes有一个非常庞大的生态环境。它的服务、工具被广泛运用。

kubernetes是一个全新的基于容器技术的分布式领先方案,简称:K8S。 它是Google开源的容器集群管理系统,它的设计灵感来自于Google内部的一个叫作Borg的容器管理系统,继承了google十余年的容器集群使用经验。它为容器化的应用提供了部署运行、资源调度、服务发现和动态伸缩等一些列完整的功能,极大地提高了大规模容器集群管理的便捷性。

在kubernetes中,有两个角色,分别是:Master节点和Worker节点。
image.png

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、集群免密

  1. ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.51
  2. ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.52
  3. ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.17.0.53

4、关闭Selinux

  1. # 永久关闭
  2. sed -i 's#enforcing#disabled#g' /etc/selinux/config
  3. # 零时关闭
  4. setenforce 0

5、关闭Swap分区

  1. swapoff -a
  2. sed -i.bak 's/^.*centos-swap/#&/g' /etc/fstab
  3. echo 'KUBELET_EXTRA_ARGS="--fail-swap-on=false"' > /etc/sysconfig/kubelet

6、配置国内的yum源

  1. wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  2. wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  3. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  4. [kubernetes]
  5. name=Kubernetes
  6. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  7. enabled=1
  8. gpgcheck=1
  9. repo_gpgcheck=1
  10. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  11. EOF
  12. setenforce 0
  13. yum makecache
  14. yum update -y --exclud=kernel*

7、更换系统内核

  1. wget http://106.13.81.75/kernel-lt-4.4.233-1.el7.elrepo.x86_64.rpm
  2. wget http://106.13.81.75/kernel-lt-devel-4.4.233-1.el7.elrepo.x86_64.rpm
  3. yum localinstall -y kernel-lt*
  4. grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg
  5. grubby --default-kernel
  6. # 重启
  7. reboot

8、设置内核参数

  1. cat > /etc/sysctl.d/k8s.conf << EOF
  2. net.ipv4.ip_forward = 1
  3. net.bridge.bridge-nf-call-iptables = 1
  4. net.bridge.bridge-nf-call-ip6tables = 1
  5. fs.may_detach_mounts = 1
  6. vm.overcommit_memory=1
  7. vm.panic_on_oom=0
  8. fs.inotify.max_user_watches=89100
  9. fs.file-max=52706963
  10. fs.nr_open=52706963
  11. net.ipv4.tcp_keepalive_time = 600
  12. net.ipv4.tcp.keepaliv.probes = 3
  13. net.ipv4.tcp_keepalive_intvl = 15
  14. net.ipv4.tcp.max_tw_buckets = 36000
  15. net.ipv4.tcp_tw_reuse = 1
  16. net.ipv4.tcp.max_orphans = 327680
  17. net.ipv4.tcp_orphan_retries = 3
  18. net.ipv4.tcp_syncookies = 1
  19. net.ipv4.tcp_max_syn_backlog = 16384
  20. net.ipv4.ip_conntrack_max = 65536
  21. net.ipv4.tcp_max_syn_backlog = 16384
  22. net.ipv4.top_timestamps = 0
  23. net.core.somaxconn = 16384
  24. EOF
  25. # 立即生效
  26. sysctl --system

9、安装基础软件

  1. yum install wget expect vim net-tools ntp bash-completion ipvsadm ipset jq iptables conntrack sysstat libseccomp -y

10、关闭防火墙

  1. systemctl disable --now firewalld

11、安装Docker

  1. # step 1: 安装必要的一些系统工具
  2. sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  3. # Step 2: 添加软件源信息
  4. sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  5. # Step 3
  6. sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
  7. # Step 4: 更新并安装Docker-CE
  8. sudo yum makecache fast
  9. # Step 5: 安装docker
  10. yum install docker-ce-19.03.12 -y
  11. # Step 6 : 启动Docker
  12. systemctl enable --now docker

12、同步集群信息

  1. yum install ntp -y
  2. ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  3. echo 'Asia/Shanghai' > /etc/timezone
  4. ntpdate time2.aliyun.com
  5. # 写入定时任务
  6. */1 * * * * ntpdate time2.aliyun.com > /dev/null 2>&1

13、部署kubernetes

  1. cat <<EOF > /etc/yum.repos.d/kubernetes.repo
  2. [kubernetes]
  3. name=Kubernetes
  4. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  5. enabled=1
  6. gpgcheck=1
  7. repo_gpgcheck=1
  8. gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
  9. EOF
  10. setenforce 0
  11. yum install -y kubelet-1.20.5 kubeadm-1.20.5 kubectl-1.20.5 -y
  12. systemctl 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

2、二进制方式安装k8s