新开了四台centos机子,升级了内核之后,按照如下方式安装,但并未成功
1. 环境配置(所有节点)
- 1.1 配置hosts文件
[root@master ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.16.1.224 master
192.16.1.225 node-1
192.16.1.226 node-2
192.16.1.227 node-3
- 1.2 禁用防火墙
systemctl stop firewalld
systemctl disable firewalld
- 1.3 禁用SELINUX
setenforce 0
vi /etc/selinux/config
# SELINUX=disabled
- 1.4 关闭swap
# 临时关闭swap
# 永久关闭 注释/etc/fstab文件里swap相关的行
swapoff -a
- 1.5 开启forward
# 开启forward
# Docker从1.13版本开始调整了默认的防火墙规则
# 禁用了iptables filter表中FOWARD链
# 这样会引起Kubernetes集群中跨Node的Pod无法通信
# docker 1806,发现默认策略又改回了ACCEPT,这个不知道是从哪个版本改回的
iptables -P FORWARD ACCEPT
- 1.6 配置转发相关参数,否则可能会出错
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
vm.swappiness=0
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
# 查看命令
sysctl --system
- 1.7 可选择项:加载ipvs相关内核模块(用于负载均衡)
# 加载ipvs相关内核模块
# 如果重新开机,需要重新加载
yum install -y ipvsadm
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack_ipv4
lsmod | grep ip_vs
- 1.8 CNI插件部署(所有节点)
sudo mkdir -p /opt/cni/bin
cd /opt/cni/bin
# 到release页面下载二进制文件
wget https://github.com/containernetworking/plugins/releases/download/v0.7.1/cni-plugins-amd64-v0.7.1.tgz
sudo tar -zxvf cni-plugins-amd64-v0.7.1.tgz
- 1.9 时间同步
#安装ntp:
yum install -y ntp
#同步时间 (与国家授时中心同步)
ntpdate 0.cn.pool.ntp.org
- 1.10 配置免密登录
2. 安装Docker(所有节点)
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 卸载安装指定版本docker-ce
yum remove -y docker-ce docker-ce-selinux container-selinux
yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.1.ce-1.el7.centos \
docker-ce-selinux-17.03.1.ce-1.el7.centos
Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信。但这里通过安装docker 1806,发现默认策略又改回了ACCEPT,这个不知道是从哪个版本改回的,因为1706还是需要手动调整这个策略的。
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["http://6f2b9229.m.daocloud.io"]
}
EOF
systemctl enable docker && systemctl restart docker
确认一下iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT
3. 安装k8s组件
参考了 https://juejin.im/post/5b45d4185188251ac062f27c
- 3.1 所有节点操作
# 配置源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装
yum install -y kubelet-1.11.0 kubeadm-1.11.0 kubectl-1.11.0
# 获取docker的cgroups
DOCKER_CGROUPS=$(docker info | grep 'Cgroup' | cut -d' ' -f3)
echo $DOCKER_CGROUPS
cgroupfs
# 配置kubelet使用国内pause镜像
# 配置kubelet的cgroups
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_DNS_ARGS="--cluster-dns=10.96.0.10 --cluster-domain=cluster.local"
KUBELET_EXTRA_ARGS="--cgroup-driver=cgroupfs --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1"
EOF
# 启动
systemctl daemon-reload
systemctl enable kubelet && systemctl start kubelet
- 3.2 master节点操作
# 1.11 版本 centos 下使用 ipvs 模式会出问题
# 参考 https://github.com/kubernetes/kubernetes/issues/65461
# 生成配置文件
cat >kubeadm-master.config<<EOF
apiVersion: kubeadm.k8s.io/v1alpha2
kind: MasterConfiguration
kubernetesVersion: v1.11.0
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
api:
advertiseAddress: 192.16.1.224
controllerManagerExtraArgs:
node-monitor-grace-period: 10s
pod-eviction-timeout: 10s
networking:
podSubnet: 10.244.0.0/16
kubeProxy:
config:
# mode: ipvs
mode: iptables
EOF
# 提前拉取镜像
# 如果执行失败 可以多次执行
kubeadm config images pull --config kubeadm-master.config
# 初始化
kubeadm init --config kubeadm-master.config
kubeadm join 192.16.1.224:6443 --token 169sqg.x15rfmfluchsiitz --discovery-token-ca-cert-hash sha256:a1346a6ef31590f9ad3ac39e93d2b78a8f13b74f510b8cedc4a9df02504f9612
rm -rf $HOME/.kube
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看node节点
kubectl get nodes
# 只有网络插件也安装配置完成之后,才能会显示为ready状态
# 设置master允许部署应用pod,参与工作负载,现在可以部署其他系统组件
# 如 dashboard, heapster, efk等
# 这一步选做,表示master节点也可以当工作节点
kubectl taint nodes --all node-role.kubernetes.io/master-
# 下载网络配置
mkdir flannel && cd flannel
wget https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
# 修改网络配置
# 此处的ip配置要与上面kubeadm的pod-network一致
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
# 修改镜像
image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64
# 这里v0.10.0版有一个bug,需要为启动flannel的daemonset添加toleration,以允许在尚未Ready的节点上部署flannel pod:
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
- key: node.kubernetes.io/not-ready
operator: Exists
effect: NoSchedule
# 如果Node有多个网卡的话,参考flannel issues 39701,
# https://github.com/kubernetes/kubernetes/issues/39701
# 目前需要在kube-flannel.yml中使用--iface参数指定集群主机内网网卡的名称,
# 否则可能会出现dns无法解析。容器无法通信的情况,需要将kube-flannel.yml下载到本地,
# flanneld启动参数加上--iface=<iface-name>
containers:
- name: kube-flannel
image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
- --iface=eth1
cd /opt/cni/bin
sudo tar -zxvf cni-plugins-amd64-v0.7.1.tgz
# 启动
kubectl apply -f kube-flannel.yml
# 查看
kubectl get pods --namespace kube-system
kubectl get svc --namespace kube-system
# 测试DNS
#启动
kubectl run nginx --replicas=2 --image=nginx:alpine --port=80
kubectl expose deployment nginx --type=NodePort --name=example-service-nodeport
kubectl expose deployment nginx --name=example-service
#查看状态
kubectl get deploy
kubectl get pods
kubectl get svc
kubectl describe svc example-service
#DNS解析
kubectl run curl --image=radial/busyboxplus:curl -i --tty
#正常输出********************************************************
nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: kubernetes.default
Address 1: 10.96.0.1 kubernetes.default.svc.cluster.local
#****************************************************************
nslookup kubernetes
nslookup example-service
curl example-service
#访问测试
# 10.96.59.56 为查看svc时获取到的clusterip
curl "10.96.59.56:80"
# 32223 为查看svc时获取到的 nodeport
http://11.11.11.112:32223/
http://11.11.11.113:32223/
#清理删除
kubectl delete svc example-service example-service-nodeport
kubectl delete deploy nginx curl
- 忘记初始master节点时的node节点加入集群命令怎么办
# 简单方法
kubeadm token create --print-join-command
# 第二种方法
token=$(kubeadm token generate)
kubeadm token create $token --print-join-command --ttl=0
参考教程:
使用kubeadm安装k8s-1.11版本
CentOS-7使用kubeadm安装Kubernetes-1.12.0(how & why)
使用kubeadm安装Kubernetes 1.12
K8S安装注意事项
docker用户过渡到kubectl命令行指南
网友评论