安装kubernetes

胡大大 2021-09-22 22:09:40 79 0 comments

  1. 更新yum软件包
yum update -y
  1. 升级linux内核
#导入ELRepo仓库的公共密钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#安装ELRepo仓库的yum源
rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
#查看可用的系统内核包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
#安装最新版本内核 kernel-lt 为长期支持版本 kernel-ml为linus个人维护版本
yum --enablerepo=elrepo-kernel install -y kernel-lt
#查看系统上的所有可用内核
sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (4.4.207-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (5.4.8-1.el7.elrepo.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-cf877f153e884428892d2a1454f652a6) 7 (Core)
# 如果上面的命令提示文件不存在,执行下面的命令 生成 grub 配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
#设置新的内核为grub2的默认版本(其中 0 是上面查询出来的可用内核)
grub2-set-default 0
# 重启服务器
reboot
# 删除旧内核
# 查看现有内核
rpm -qa | grep kernel
  1. 安装相关依赖
yum update -y && yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git lrzsz yum-utils device-mapper-persistent-data lvm2
  1. 修改相关配置,禁用防火墙
systemctl stop firewalld && systemctl disable firewalld && swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab && setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config && systemctl stop postfix && systemctl disable postfix
  1. kube-proxy开启ipvs的前置条件
modprobe br_netfilter

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack
  1. 调整内核参数
cat > k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

cp k8s.conf /etc/sysctl.d/k8s.conf && sysctl -p /etc/sysctl.d/k8s.conf
  1. 调整时区
yum install chrony -y && systemctl enable chronyd && systemctl start chronyd && chronyc sources
  1. 设置rsyslogd和systemd journald
# 持久化保存日志的目录
mkdir /var/log/journal && mkdir /etc/systemd/journald.conf.d

cat > /etc/systemd/journald.conf.d/99-prophet.conf <<EOF
[Journal]
# 持久化保存到磁盘
Storage=persistent
# 压缩历史日志
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大占用空间 10G
SystemMaxUse=10G
# 单日志文件最大 200M
SystemMaxFileSize=200M
# 日志保存时间 2 周
MaxRetentionSec=2week
# 不将日志转发到 syslog
ForwardToSyslog=no
EOF

systemctl restart systemd-journald
  1. 安装Containerd
#国内可以使用https://download.fastgit.org替代https://github.com
wget https://download.fastgit.org/containerd/containerd/releases/download/v1.5.5/cri-containerd-cni-1.5.5-linux-amd64.tar.gz && tar -C / -xzf cri-containerd-cni-1.5.5-linux-amd64.tar.gz && mkdir -p /etc/containerd && containerd config default > /etc/containerd/config.toml
# 修改config文件
对于使用 systemd 作为 init system 的 Linux 的发行版,使用 systemd 作为容器的 cgroup driver 可以确保节点在资源紧张的情况更加稳定,所以推荐将 containerd 的 cgroup driver 配置为 systemd。修改前面生成的配置文件 /etc/containerd/config.toml,在 plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options 配置块下面将 SystemdCgroup 设置为 true
# 重启containerd
systemctl enable containerd --now && systemctl daemon-reload && systemctl restart containerd
  1. 安装kubeadm
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

# 删除旧版本,如果安装了
#yum remove kubeadm kubectl kubelet kubernetes-cni cri-tools socat

# 安装指定版本用下面的命令#
# 查看最新稳定版本https://storage.googleapis.com/kubernetes-release/release/stable-1.txt
yum -y install kubeadm-1.22.2 kubectl-1.22.2 kubelet-1.22.2

# 开机自启
systemctl enable --now kubelet
  1. 修改kubelet配置
vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
# 加入下面内容
Environment="KUBELET_EXTRA_ARGS=--container-runtime=remote --runtime-request-timeout=15m --container-runtime-endpoint=unix:///run/containerd/containerd.sock"
  1. 开放端口
iptables -I INPUT 1  -p tcp -m state --state NEW -m tcp --dport 6443 -j ACCEPT
iptables -I INPUT 1  -p tcp -m state --state NEW -m tcp --dport 2379:2380 -j ACCEPT
iptables -I INPUT 1  -p tcp -m state --state NEW -m tcp --dport 10250:10253 -j ACCEPT
  1. 修改hosts
vi /etc/hosts

192.168.1.100 master
192.168.1.101 node1
192.168.1.102 node2
  1. 初始化master
kubeadm config print init-defaults --component-configs KubeletConfiguration > kubeadm.yaml

#修改 kubeadm-config.yaml文件如下部分
localAPIEndpoint:
  advertiseAddress: 192.168.195.100(这里的ip修改为主机ip)
nodeRegistration:
  criSocket: /run/containerd/containerd.sock  # 使用 containerd的Unix socket 地址
  imagePullPolicy: IfNotPresent
  name: master
  taints:  # 给master添加污点,master节点不能调度应用
  - effect: "NoSchedule"
    key: "node-role.kubernetes.io/master"

# 默认拉取镜像地址k8s.gcr.io国内无法访问,指定阿里云镜像仓库地址
imageRepository: registry.aliyuncs.com/google_containers

# kubernetes 版本
kubernetesVersion: v1.22.1

# networking组下新增一行 podSubnet: "10.244.0.0/16" flannel默认使用的网断
networking:
  podSubnet: "10.244.0.0/16"
  serviceSubnet: 10.96.0.0/12
  
# 将 kube-proxy 默认的调度方式改为ipvs
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: ipvs

#查看所需镜像
kubeadm config images list

# 由于看k8s.gcr.io被墙,所以使用阿里云镜像仓库来做替代,利用阿里云海外机器构建镜像,具体操作请百度,然后拉取阿里云对应镜像
crictl pull 阿里云镜像域名/coredns:v1.8.4
crictl pull 阿里云镜像域名/etcd:3.5.0-0
crictl pull 阿里云镜像域名/kube-apiserver:v1.22.2
crictl pull 阿里云镜像域名/kube-controller-manager:v1.22.2
crictl pull 阿里云镜像域名/kube-proxy:v1.22.2
crictl pull 阿里云镜像域名/kube-scheduler:v1.22.2
crictl pull 阿里云镜像域名/pause:3.5

#给镜像打标签为kukeadm上对应的k8s域名标签,例子如下
ctr -n k8s.io i tag 阿里云镜像域名/pause:3.5 k8s.gcr.io/pause:3.5
ctr -n k8s.io i tag 阿里云镜像域名/kube-scheduler:v1.22.2 k8s.gcr.io/kube-scheduler:v1.22.2
ctr -n k8s.io i tag 阿里云镜像域名/kube-proxy:v1.22.2 k8s.gcr.io/kube-proxy:v1.22.2
ctr -n k8s.io i tag 阿里云镜像域名/kube-controller-manager:v1.22.2 k8s.gcr.io/kube-controller-manager:v1.22.2
ctr -n k8s.io i tag 阿里云镜像域名/kube-apiserver:v1.22.2 k8s.gcr.io/kube-apiserver:v1.22.2
ctr -n k8s.io i tag 阿里云镜像域名/etcd:3.5.0-0 k8s.gcr.io/etcd:3.5.0-0
ctr -n k8s.io i tag 阿里云镜像域名/coredns:v1.8.4 k8s.gcr.io/coredns/coredns:v1.8.4


# 初始化 --experimental-upload-certs 给其它主节点自动颁发证书 tee kubeadm-init.log 把所有信息写入文件中
kubeadm init --config kubeadm.yaml --upload-certs | tee kubeadm-init.log


mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

export KUBECONFIG=/etc/kubernetes/admin.conf

vi join.txt
kubeadm join 192.168.195.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:79674944053a1ee5555b03cea88f4bb7ad8d71f50ff7ef6a1cc0a21ccb1a55ee

#后面node节点通过上面的命令加入集群
  1. 部署flannel网络
#由于raw.githubusercontent.com被墙,去https://githubusercontent.com.ipaddress.com/raw.githubusercontent.com这个网站查询ip地址,然后再hosts文件做域名ip解析。
185.199.108.133 raw.githubusercontent.com
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#查看需要的镜像cat kube-flannel.yaml
#拉取镜像
crictl pull registry.cn-shenzhen.aliyuncs.com/ohdata/flannel:v0.14.0
#打标签
ctr -n k8s.io i tag registry.cn-shenzhen.aliyuncs.com/ohdata/flannel:v0.14.0 quay.io/coreos/flannel:v0.14.0

➜  ~ vi kube-flannel.yml
......
containers:
- name: kube-flannel
  image: quay.io/coreos/flannel:v0.14.0
  command:
  - /opt/bin/flanneld
  args:
  - --ip-masq
  - --kube-subnet-mgr
  - --iface=eth0  # 如果是多网卡的话,指定内网网卡的名称
……

kubectl create -f kube-flannel.yml

# 查看命名空间为kube-system的pod情况
kubectl get pod -n kube-system

# 查看更详细的信息
kubectl get pod -n kube-system -o wide

# 查看k8s所有节点连接情况
kubectl get node

到此就安装成功了k8s的master节点。

转载请注明出处。



标签
评论一下

评论列表

暂时没有评论,快来评论吧..