K8S本地基础实验环境安装配置-Centos


K8S本地基础实验环境安装配置-Centos

kubernetes Centos Install

Kubernetes作为一款社区最火的容器管理调度软件,它主要解决了两方面的问题:

  • 容器的编排调度

从原来的AIO的应用变成容器化应用微服务化应用,带来的好处就是服务解耦,可以快速扩展服务,带来的不好就是用户管理成本增加,kuebrnetes很好地解决了这个问题,帮助我们实现了应用层面的管理抽象,根据不同业务应用,使用不同的部署类型。

  • kubernetes的一致性能力

虽然云计算现在在多云场景下还不具备真正的一个“build once,run any cloud provider”,但这个趋势已经开始呈现了,大家遵循kubernetes的API,保障API的一致性,想想多年前的运维要在多云厂商环境下部署服务的处境,考虑不同的操作系统、不同的操作系统版本、内核版本、网络差异还有一些诡异的问题等等,通过kubernetes已经开始有了一个很好地发展趋势,面向用户运维更加的友好。


kubernetes架构图


在centos系统中安装配置

系统初始化

# 设置系统主机名以及 Host 文件的相互解析
sudo hostnamectl set-hostname k8s.docker.internal

cat >> /etc/hosts << EOF
k8s.docker.internal
EOF

# 关闭 防火墙&selinux&swap
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab


# 安装依赖包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget

# 调整内核参数,对于 K8S
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF

sysctl -p /etc/sysctl.d/kubernetes.conf

kube-proxy开启ipvs的前置条件

modprobe br_netfilter

cat > /etc/sysconfig/modules/ipvs.modules <

安装 Docker 软件

wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce

systemctl enable docker
systemctl start docker

cat </etc/docker/daemon.json
{
  "registry-mirrors": ["https://w3qtirff.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

systemctl restart docker

安装kubeadm,kubelet和kubectl

kubectl可以不必在所有节点上安装

cat <>/etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
EOF

yum -y install kubelet kubeadm kubectl
systemctl enable kubelet

初始化主节点

# 查看k8s部署需要的镜像版本,调整下面的镜像版本
kubeadm config images list

cat << EOF> k8s_img_pull.sh
#!/bin/bash
set -e

KUBE_VERSION=\${1:-v1.19.2}
KUBE_DASHBOARD_VERSION=v1.10.1
KUBE_PAUSE_VERSION=3.2
ETCD_VERSION=3.4.13-0
COREDNS_VERSION=1.7.0

# 这里为了使国内拉取镜像更快,使用了mirrorgooglecontainers进行拉取
GCR_URL=k8s.gcr.io  # 此处修改为了k8s.gcr.io

#GCR_URL=k8s.gcr.io
ALIYUN_URL=registry.cn-hangzhou.aliyuncs.com/google_containers

#get images
images=(kube-proxy:\${KUBE_VERSION}
kube-scheduler:\${KUBE_VERSION}
kube-controller-manager:\${KUBE_VERSION}
kube-apiserver:\${KUBE_VERSION}
pause:\${KUBE_PAUSE_VERSION}
etcd:\${ETCD_VERSION}
coredns:\${COREDNS_VERSION}
kubernetes-dashboard-amd64:\${KUBE_DASHBOARD_VERSION})

for imageName in \${images[@]} ; do
  docker pull \${ALIYUN_URL}/\${imageName}
  docker tag \${ALIYUN_URL}/\${imageName} \${GCR_URL}/\${imageName}
  docker rmi \${ALIYUN_URL}/\${imageName}
done
docker images
EOF

bash k8s_img_pull.sh

# 初始化启动 Master
kubeadm init --config=kubeadm-config.yaml

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

# 启动flannel网络服务
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yaml


# 停止K8S
kubeadm reset
rm -rf $HOME/.kube

# 确保所有的Pod都处于Running状态
kubectl get pod --all-namespaces -o wide

# master node参与工作负载
## 查看污点标记 node-role.kubernetes.io/master:NoSchedule
kubectl describe node k8s.docker.internal |grep Taint

## 执行命令去除标记
kubectl taint nodes k8s.docker.internal node-role.kubernetes.io/master:NoSchedule-

# 检测集群状态
kubectl get cs 

# kube-proxy开启ipvs
## 修改ConfigMap的kube-system/kube-proxy中的config.conf,把 mode: "" 改为mode: “ipvs" 保存退出即可
kubectl edit cm kube-proxy -n kube-system


## 删除之前的proxy pod
kubectl get pod -n kube-system |grep kube-proxy |awk '{system("kubectl delete pod "$1" -n kube-system")}'

## 查看proxy运行状态
kubectl get pod -n kube-system |grep kube-proxy 

## 查看日志,如果有 `Using ipvs Proxier.` 说明kube-proxy的ipvs 开启成功!
kubectl logs `kubectl get pod -n kube-system |grep kube-proxy|awk '{print $1}'` -n kube-system | grep ipvs

更多信息可以star [github]: https://github.com/darebeat/k8s.git


文章作者: darebeat
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 darebeat !
  目录