1、kubernetes安装部署方法:
二进制安装的k8s: 步骤繁琐
ansible 一键自动化安装 https://github.com/easzlab/kubeasz
saltstack 一键自动化安装 https://github.com/unixhot/salt-k8s
kubeadm安装k8s: google官方pull镜像
docker proxy代理
2、环境要求:
| 机器名 | ip地址 | cpu和内存要求 |
|---|---|---|
| master | 10.0.0.70 | 2c2g(关闭swap) |
| node1 | 10.0.0.66 | 2c2g(关闭swap) |
| node2 | 10.0.0.67 | 2c2g(关闭swap) |
3、系统优化:(三台主机都要做)
#检查防火墙是否关闭getenforce#临时关闭setenforce=0#各主机相互解析cat >> /etc/hosts <<EOF10.0.0.70 master10.0.0.66 node0110.0.0.67 node02EOF#禁用swap,然后重启电脑sed -i '/swap/ s/^/#/g' /etc/fstab && reboot#各节点同步时间yum install ntpdate -yntpdate ntp1.aliyun.com
4、安装指定版本docker-ce
#配置相关yum源curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安装docker-ceyum install docker-ce -y#配置镜像加速器mkdir /etc/dockercat > /etc/docker/daemon.json<<EOF{"registry-mirrors":["https://71uirsl7.mirror.aliyuncs.com"]}EOF#启动docker并加入开机自启systemctl start dockersystemctl enable docker
5、在master节点 启动docker的本地仓库,为方便以后拉镜像方便
#拉取registry镜像docker pull registry#基于镜像文件启动一个容器docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry:latest#修改daemon.json文件,配置为非https的模式,用到pull的主机也需要配置vim /etc/docker/daemon.json"insecure-registries": ["10.0.0.70:5000"]#重新启动docker服务systemctl restart docker
用脚本经行镜像的拉取以及打标签上传本地仓库
#写一个镜像脚本vim pull.sh#!/bin/bashread -p "请输入镜像名称及版本[xxx:xxx]:" Versiondocker pull $Versiondocker tag $Version 10.0.0.70:5000/$Versiondocker push 10.0.0.70:5000/$Versiondocker rmi $Version
6、配置kubernetes的yum源
#所有节点都要配置
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[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 kubelet kubeadm kubectl -y
#把kubelet服务加入开机自启
systemctl enable kubelet
#配置内核模块相关参数(检查值是否为1,sysctl -a |grep bride)
cat >/etc/sysctl.d/k8s.conf<<EOF
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
EOF
#让配置生效
sysctl -p /etc/sysctl.d/k8s.conf
#可查看要下载那个镜像文件
7、添加忽略使用swap分区的警告,修改配置文件kubelet
cat >/etc/sysconfig/kubelet <<EOF
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
EOF
8、master和node节点需要的镜像
master
k8s.gcr.io/kube-apiserver:v1.15.0
k8s.gcr.io/kube-controller-manager:v1.15.0
k8s.gcr.io/kube-scheduler:v1.15.0
k8s.gcr.io/kube-proxy:v1.15.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1
#node/节点
k8s.gcr.io/kube-proxy:v1.15.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/coredns:1.3.1
9、由于从k8s.gcr.io仓库拉取镜像时间太长,可以考虑使用下面的方法
kubeadm config images list 列出所需的镜像
#使用脚本的方法
vim kube_image.sh
#!/bin/bash
Url="registry.cn-hangzhou.aliyuncs.com/google_containers"
images=(
kube-apiserver:v1.15.0
kube-controller-manager:v1.15.0
kube-scheduler:v1.15.0
kube-proxy:v1.15.0
pause:3.1
etcd:3.3.10
coredns:1.3.1
)
for imageName in ${images[@]} ; do
docker pull ${Url}/${imageName}
docker tag ${Url}/${imageName} k8s.gcr.io/${imageName}
docker rmi ${Url}/${imageName}
done
docker pull quay.io/coreos/flannel:v0.11.0-amd64 ##网络配置镜像
10、使用kubeadm初始化k8s集群
#选择一个控制节点执行
kubeadm init --kubernetes-version=1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
#--pod-network-cidr=10.244.0.0/16这个是flannel默认的网络地址
#初始化完成后,执行下面的操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#初始化出现[ERROR FileContent--proc-sys-net-ipv4-ip_forward]错误:
--------------------------------------------------------
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
#解决方法:
[root@master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
---------------------------------------------------------
11、给k8s集群加入node节点:
#node节点
kubeadm join 10.0.0.70:6443 --token q5bcrb.qj1t2sh8o26kdylp \
--discovery-token-ca-cert-hash sha256:b40a365e0ff689aa301d0600f5325820aa73ea1a28e40570fe09e5dddeee2ded
#出现[ERROR FileContent--proc-sys-net-ipv4-ip_forward]错误:
--------------------------------------------------------
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1
#解决方法:
[root@master ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
12、为k8s集群配置网络插件
#每台主机拉取网络配置镜像
docker pull quay.io/coreos/flannel:v0.11.0-amd64
#第一种方法:直接引用 master
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#第二种方法把需要的yml文件下载本地然后再生成资源
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
#修改kube-flannel.yml文件,优化网络
vim /kube-flannel.yml
----------------------
net-conf.json: |
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan",
"Directrouting": true #加一条配置
}
}
------------------------
#生成资源
kubectl create -f kube-flannel.yml
#检测资源
kubectl get pods -n kube-system
#检测node节点
kubectl get nodes
13、查看k8s集群信息
kubectl cluster-info
#查看节点是否正常
kubectl get nodes
#查看目前运行的pod资源是否正常
kubectl get pods -n kube-system
14、修改对外暴露的端口范围
编辑apiserver配置文件
vim /etc/kubernetes/manifests/kube-apiserver.yaml
- command: #添加一条配置
- --service-node-port-range=1-65535
#重启apiserver
kubectl delete pod kube-apiserver-master -n kube-system
15、kubectl 命令补全
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
