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