構(gòu)建Nginx鏡像和k8s組件功能介紹

一、基于Dockerfile構(gòu)建nginx鏡像

1.1 準(zhǔn)備Dockerfile用到的文件

1.2 編寫Dockerfile文件

cat >> Dockerfile <<EOF
# 基于底層鏡像
FROM ubuntu:20.04

# label標(biāo)簽是key/value形式 描述鏡像信息
LABEL "maintiner"="Chris"

# 修改鏡像源信息
COPY sources.list /etc/apt/sources.list

# 更新鏡像源 安裝編譯依賴 創(chuàng)建目錄
RUN apt update && apt install -y iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc openssh-server iotop unzip zip make vim && mkdir -p /data/nginx

# 拷貝壓縮包并自動(dòng)解壓
ADD nginx-1.20.2.tar.gz /usr/local/src

# 編譯并刪除解壓目錄
RUN cd /usr/local/src/nginx-1.20.2 && ./configure --prefix=/apps/nginx && make && make install && ln -sv /app/nginx/sbin/nginx /usr/bin && rm -rf /usr/local/src/nginx-1.20.2

# 拷貝nginx.conf配置文件
ADD nginx.conf /apps/nginx/conf/nginx.conf

# 拷貝docker-entrypoint.sh
ADD docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh

# 鏈接標(biāo)準(zhǔn)輸出和錯(cuò)誤日志 可docker logs查看
RUN ln -sv /dev/stdout /apps/nginx/logs/access.log
RUN ln -sv /dev/stderr /apps/nginx/logs/error.log

# 添加nginx用戶和組 修改目錄歸屬用戶和組
RUN groupadd -g 2022 nginx && useradd -g nginx -s /usr/sbin/nologin -u 2022 nginx && chown -R nginx.nginx /apps/nginx /data/nginx

# 容器占用端口
EXPOSE 80 443

# 啟動(dòng)命令
#CMD ["/apps/nginx/sbin/nginx","-g","daemon off;"]
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["-g","daemon off;"]
EOF

1.3 構(gòu)建鏡像

docker build -t 192.168.204.200/n60/nginx:v1.20.2 .

1.4 運(yùn)行容器

docker run -itd -p80:80 192.168.204.200/n60/nginx:v1.20.2

1.5 訪問容器

nginx.jpg

二、Docker的cpu和內(nèi)存的資源限制

2.1 下載壓測鏡像

docker pull lorel/docker-stress-ng:latest

2.2 壓測cpu

  • 容器需要使用cpu個(gè)數(shù)為2
docker run -it --rm lorel/docker-stress-ng --cpu 2

top 按1查看

  • two cpus.jpg

    docker stats查看

  • two cpus docker stats.jpg
  • 限制容器使用cpu個(gè)數(shù)為1,容器需要使用的cpu個(gè)數(shù)為2

docker run -it --cpus 1 --rm lorel/docker-stress-ng --cpu 2

top 按1查看

  • limit 1 top.jpg

    docker stats
  • limit 1 stats.jpg
  • 在宿主機(jī)上查看分配給容器的cpu
cat /sys/fs/cgroup/cpu,cpuacct/docker/fd984ff398613870ba22adb329415fd4ea214d97e1f24d52b2cf6862085e16b2/cpu.cfs_quota_us

文件中的單位是毫核焊切,除以1000是百分比的形式,再除以100是cpu個(gè)數(shù)

  • check cpu.jpg

2.3 壓測內(nèi)存

  • 默認(rèn)兩個(gè)vm芳室,占用兩個(gè)cpu专肪,使用命令限制容器使用一個(gè)cpu
docker run -it --cpus 1 --rm lorel/docker-stress-ng --vm 2
  • 容器需要使用兩個(gè)vm,一個(gè)vm使用256M
    docker stats
  • two vm mem stats.jpg
  • 限制容器使用內(nèi)存200M
docker run -it --cpus 1 -m 200m --rm lorel/docker-stress-ng --vm 2

docker stats

  • limit 200 mem.jpg
  • 在宿主機(jī)上查看分配給容器的mem
cat /sys/fs/cgroup/memory/docker/e2dd9d29676f664507e233366b6de911f50bacd626033bf362543a57c6cd866c/memory.limit_in_bytes

文件中單位是字節(jié)堪侯,除以1024是K嚎尤,再除以1024是M

  • check mem.jpg

三、Docker存儲(chǔ)卷和網(wǎng)絡(luò)

3.1 查看容器詳細(xì)信息

docker inspect 容器id
  • Lower Dir:image鏡像層(鏡像本身伍宦,只讀)
  • Upper Dir:容器的上層(讀寫)
  • Merged Dir:容器的文件系統(tǒng)芽死,使用Union FS(聯(lián)合文件系統(tǒng))將lower dir和upper dir合并給容器使用
  • Work Dir:容器在宿主機(jī)的工作目錄

3.2 容器在宿主機(jī)的目錄

  • docker數(shù)據(jù)默認(rèn)在宿主機(jī)/var/lib/docker目錄下乏梁,在容器中寫入的文件,一旦容器被刪除关贵,目錄丟失

3.3 容器掛載目錄

  • 創(chuàng)建目錄
mkdir -p /data/testapp
echo "testapp page" > /data/testapp/index.html
  • 啟動(dòng)兩個(gè)tomcat容器
docker run -tid --name web1 -v /data/testapp:/usr/local/tomcat/webapps/testapp -p 8080:8080 tomcat:8.5.73
docker run -tid --name web2 -v /data/testapp:/usr/local/tomcat/webapps/testapp -p 8081:8080 tomcat:8.5.73
  • 兩個(gè)容器訪問的數(shù)據(jù)目錄一樣
    web1
    web1.jpg

    web2
    web2.jpg
  • 掛載只讀目錄
docker run -itd --name web3 -v /data/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml:ro -v /data/testapp:/usr/local/tomcat/webapps/testapp -p 8083:8080 tomcat:8.5.73

server.xml只讀

ro.jpg

  • 創(chuàng)建docker volume
docker volume create n60

創(chuàng)建卷n60

volume n60.jpg

  • 掛載docker volume
docker run -it -p 3306:3306 -v n60:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.38
  • volume n60 mysqldata.jpg

3.4 Docker網(wǎng)絡(luò)介紹

  • 查看docker網(wǎng)絡(luò)
docker network ls
docker network ls.jpg

四遇骑、k8s各組件的功能介紹

4.1 kube-apiserver

  • 運(yùn)行在master節(jié)點(diǎn)上
  • Kubernetes API server提供k8s各類資源對象的增刪改查及watch等HTTP Rest接口,這些對象包括pods揖曾、services落萎、replicationcontrollers等,API Server為REST等操作提供服務(wù)炭剪,并為集群的共享狀態(tài)提供前端练链,所有其他組件都通過改前端進(jìn)行交互。
  • 端口默認(rèn)值為6443奴拦,可通過啟動(dòng)參數(shù)"--secure-port"的值來修改默認(rèn)值兑宇。
  • 默認(rèn)IP地址為非本地(Non-Localhost)網(wǎng)絡(luò)端口,通過啟動(dòng)參數(shù)"--bind-address"設(shè)置改值粱坤。
  • 端口用于接收客戶端隶糕、dashboard等外部HTTPS請求。
  • 用于基于Tocken文件或客戶端證書以及HTTP Base的請求站玄。
  • 用于基于策略的授權(quán)枚驻。

4.2 kube-scheduler

  • 運(yùn)行在master節(jié)點(diǎn)上
  • Kubernetes調(diào)度器是一個(gè)控制面進(jìn)程,負(fù)責(zé)Pods指派到節(jié)點(diǎn)上株旷。
  • 通過調(diào)度算法為待調(diào)度Pod列表的每個(gè)Pod從可用Node列表中選擇一個(gè)最合適的Node再登,并將信息寫入etcd中。
  • node節(jié)點(diǎn)上的kubelet通過API Server監(jiān)聽到kubernetes scheduler產(chǎn)生的Pod綁定信息晾剖,然后獲取對應(yīng)的Pod清單锉矢,下載Image,并啟動(dòng)容器齿尽。
  • 策略:
    ????LeastRequestedPriority:優(yōu)先從備選節(jié)點(diǎn)列表中選擇資源消耗最小的節(jié)點(diǎn)(CPU+內(nèi)存)沽损。
    ????CalculateNodeLabelPriority:優(yōu)先選擇含有指定Label的節(jié)點(diǎn)。
    ????BalancedResourceAllocation:優(yōu)先從備選節(jié)點(diǎn)列表中選擇各項(xiàng)資源使用率最均衡的節(jié)點(diǎn)循头。

4.3 kube-controller-manager

  • 運(yùn)行在master節(jié)點(diǎn)上
  • Controller Manager還包括一些子控制器(副本控制器绵估、節(jié)點(diǎn)控制器、命名空間控制器和服務(wù)賬號(hào)控制器等)卡骂,控制器作為集群內(nèi)部的管理控制中心国裳,負(fù)責(zé)集群內(nèi)的Node、Pod副本全跨、服務(wù)端點(diǎn)(Endpoint)缝左、命名空間(Namespace)、服務(wù)賬號(hào)(ServiceAccount)、資源定額(ResourceQuota)的管理渺杉,當(dāng)某個(gè)Node意外宕機(jī)時(shí)蛇数,Controller Manager會(huì)及時(shí)發(fā)現(xiàn)并執(zhí)行自動(dòng)化修復(fù)流程,確保集群中的pod副本始終處于預(yù)期的工作狀態(tài)少办。
  • 每間隔5秒檢查一次節(jié)點(diǎn)的狀態(tài)。
  • 如果沒有收到節(jié)點(diǎn)的心跳诵原,則將該node節(jié)點(diǎn)標(biāo)記為不可達(dá)英妓。
  • 在標(biāo)記為無法訪問之前等待40秒。
  • 如果該node節(jié)點(diǎn)被標(biāo)記為無法訪問后5分鐘還沒有恢復(fù)绍赛,Controller manager會(huì)刪除當(dāng)前node節(jié)點(diǎn)的所有pod并在其它可用節(jié)點(diǎn)重建這些pod蔓纠。
  • pod高可用機(jī)制:
    ????node monitor period:節(jié)點(diǎn)監(jiān)視周期,5s
    ????node monitor grace period:節(jié)點(diǎn)監(jiān)視器寬限期吗蚌,40s
    ????pod eviction timeout:pod驅(qū)逐超時(shí)時(shí)間腿倚,5m

4.4 kube-proxy

  • 運(yùn)行在node節(jié)點(diǎn)上
  • 反映了node上Kubernetes API中定義的服務(wù),并可以通過一組后端進(jìn)行簡單的TCP蚯妇、UDP和SCTP流轉(zhuǎn)發(fā)或者在一組后端進(jìn)行循環(huán)TCP敷燎、UDP和SCTP轉(zhuǎn)發(fā),用戶必須使用apiserver API創(chuàng)建一個(gè)服務(wù)來配置代理箩言,其實(shí)就是kube-proxy通過在主機(jī)上維護(hù)網(wǎng)絡(luò)規(guī)則并執(zhí)行連接轉(zhuǎn)發(fā)來實(shí)現(xiàn)Kubernetes服務(wù)訪問硬贯。
  • 監(jiān)聽API Server中服務(wù)對象的變化,再通過管理IPtables或者IPVS規(guī)則陨收,實(shí)現(xiàn)網(wǎng)絡(luò)的轉(zhuǎn)發(fā)饭豹。
  • 不同版本可支持三種工作模式:
    ????UserSpace:k8s v1.1之前使用,k8s 1.2及以后就已經(jīng)淘汰务漩。
    ????IPtables:k8s 1.1版本開始支持拄衰,1.2開始為默認(rèn)模式
    ????IPVS:k8s 1.9引入到1.11為正式版本,需要安裝ipvsadm饵骨、ipset工具包和加載ip_vs內(nèi)核模塊
  • 當(dāng)kube-proxy以IPVS代理模式啟動(dòng)時(shí)翘悉,kube-proxy將驗(yàn)證節(jié)點(diǎn)上是否安裝了IPVS模塊,如果未安裝居触,則kube-proxy將回退到IPtables代理模式镐确。
  • 使用IPVS模式,kube-proxy會(huì)監(jiān)視Kubernetes Service對象和Endpoints饼煞,調(diào)用宿主機(jī)內(nèi)核Netlink接口以相應(yīng)的創(chuàng)建IPVS規(guī)則并定期與Kubernetes Service對象Endpoints對象同步IPVS規(guī)則源葫,以確保IPVS狀態(tài)與期望一直,訪問服務(wù)時(shí)砖瞧,流量將被重定向到其中一個(gè)后端Pod息堂,IPVS使用哈希表作為底層數(shù)據(jù)結(jié)構(gòu)并在內(nèi)核空間中工作,這意味著IPVS可以更快地重定向流量,并且在同步代理規(guī)則時(shí)具有更好的性能荣堰。

4.5 kubelet

  • 運(yùn)行在node節(jié)點(diǎn)上
  • worker節(jié)點(diǎn)的代理組件床未,監(jiān)視分配給節(jié)點(diǎn)的pod
  • 向master匯報(bào)node節(jié)點(diǎn)的狀態(tài)信息
  • 接收指令并在Pod中創(chuàng)建docker容器
  • 準(zhǔn)備Pod所需的數(shù)據(jù)卷
  • 返回Pod的運(yùn)行狀態(tài)
  • 在node節(jié)點(diǎn)執(zhí)行容器健康檢查

4.6 kubectl

  • 是一個(gè)通過命令對kubernetes集群進(jìn)行管理的客戶端工具。

4.7 etcd

  • 是由CoreOS公司開發(fā)振坚,目前是kubernetes默認(rèn)使用的key-value數(shù)據(jù)存儲(chǔ)系統(tǒng)薇搁,用于保存kubernetes的所有集群數(shù)據(jù),etcd支持分布式集群功能渡八,生產(chǎn)環(huán)境使用時(shí)需要為etcd數(shù)據(jù)提供定期備份機(jī)制啃洋。

4.8 dns

  • DNS負(fù)責(zé)為整個(gè)集群提供DNS服務(wù),從而實(shí)現(xiàn)服務(wù)之間的訪問屎鳍。

4.9 Dashboard

  • Dashboard是基于網(wǎng)頁的kubernetes用戶界面宏娄,可以使用Dashboard獲取運(yùn)行在集群中的應(yīng)用的概覽信息,也可以創(chuàng)建或者修改kubernetes資源(如Deployment逮壁、Job孵坚、DaemonSet等),也可以對Deployment實(shí)現(xiàn)彈性伸縮窥淆、發(fā)起滾動(dòng)升級卖宠、重啟Pod或者使用向?qū)?chuàng)建新的應(yīng)用。

五忧饭、部署高可用k8s集群

主機(jī)環(huán)境準(zhǔn)備

IP 角色 系統(tǒng) 內(nèi)存 CPU
192.168.96.11 k8s-master1 ubutu 20.04.3 2G 2C
192.168.96.12 k8s-master2 ubutu 20.04.3 2G 2C
192.168.96.13 k8s-node1 ubutu 20.04.3 2G 2C
192.168.96.14 k8s-node2 ubutu 20.04.3 2G 2C
192.168.96.12 k8s-etcd1 ubutu 20.04.3 2G 2C
192.168.96.13 k8s-etcd2 ubutu 20.04.3 2G 2C
192.168.96.14 k8s-etcd3 ubutu 20.04.3 2G 2C
192.168.96.12 k8s-harbor1 ubutu 20.04.3 2G 2C
192.168.96.13 k8s-harbor2 ubutu 20.04.3 2G 2C
192.168.96.12 k8s-keepalived1 ubutu 20.04.3 2G 2C
192.168.96.13 k8s-keepalived2 ubutu 20.04.3 2G 2C
192.168.96.12 k8s-haproxy1 ubutu 20.04.3 2G 2C
192.168.96.13 k8s-haproxy2 ubutu 20.04.3 2G 2C

5.1 部署keepalived和haproxy

  • 192.168.96.12主機(jī)配置keepalived
apt install -y keepalived haproxy
cat > /etc/keepalived/keepalive.conf <<EOF
global_defs {
   notification_email {
     acassen
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    garp_master_delay 10
    smtp_alert
    virtual_router_id 60
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.96.188 dev ens33 label ens33:0
        192.168.96.189 dev ens33 label ens33:1
        192.168.96.190 dev ens33 label ens33:2
        192.168.96.191 dev ens33 label ens33:3
    }
}
EOF
systemctl restart keepalived.service
ifconfig | grep 192.168.    # 查看vip
  • 192.168.96.13主機(jī)配置keepalived
apt install -y keepalived haproxy
cat > /etc/keepalived/keepalive.conf <<EOF
global_defs {
   notification_email {
     acassen
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    garp_master_delay 10
    smtp_alert
    virtual_router_id 60
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.96.188 dev ens33 label ens33:0
        192.168.96.189 dev ens33 label ens33:1
        192.168.96.190 dev ens33 label ens33:2
        192.168.96.191 dev ens33 label ens33:3
    }
}
EOF
systemctl restart keepalived.service
  • 192.168.96.12主機(jī)逗堵,驗(yàn)證vip切換,停止keepalived眷昆,再啟動(dòng)
ifconfig | grep 192.168.    # 查看vip
systemctl stop keepalived.service    # 停止keepalived
ifconfig | grep 192.168.    # vip飄到備機(jī)
systemctl start keepalived.service    # 再啟動(dòng)keepalived
ifconfig | grep 192.168.    # vip回到主機(jī)
  • 192.168.96.12主機(jī)配置haproxy
cat > /etc/haproxy/haproxy.cfg <<EOF
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

listen k8s-6443
       bind 192.168.96.188:6443
       mode tcp
       server 192.168.96.11 192.168.96.11:6443 check inter 2s fall 3 rise 5
       server 192.168.96.12 192.168.96.12:6443 check inter 2s fall 3 rise 5
EOF
systemctl restart haproxy
ss -ntl    # 查看vip端口是否監(jiān)聽
  • 192.168.96.13主機(jī)配置haproxy
cat > /etc/haproxy/haproxy.cfg <<EOF
global
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user haproxy
        group haproxy
        daemon

        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        # See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediate
        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        timeout connect 5000
        timeout client  50000
        timeout server  50000
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http

listen k8s-6443
       bind 192.168.96.188:6443
       mode tcp
       server 192.168.96.11 192.168.96.11:6443 check inter 2s fall 3 rise 5
       server 192.168.96.12 192.168.96.12:6443 check inter 2s fall 3 rise 5
EOF
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf    # 修改內(nèi)核參數(shù)蜒秤,允許服務(wù)監(jiān)聽在本機(jī)沒有的地址上
sysctl -p    # 使參數(shù)生效
systemctl restart haproxy
 ss -ntl    # 查看vip端口是否監(jiān)聽

5.2 部署harbor

  • 192.168.96.12安裝harbor
cp harbor.yml.tmpl harbor.yml    # 賦值harbor配置文件,然后修改hostname為harbor域名
mkdir certs    # 創(chuàng)建目錄亚斋,用作存放證書
openssl genrsa -out ./harbor-ca.key    # 生成私有key
openssl  req -x509 -new -nodes -key ./harbor-ca.key -subj "/CN=HARBOR_DOMAIN" -days 3650 -out ./harbor-ca.crt    # 給harbor的域名簽發(fā)十年有效期的證書作媚,然后修改harbor中證書和私鑰路徑
./install.sh --with-trivy --with-chartmuseum    # 安裝harbor

然后修改電腦hosts文件,用harbor域名從瀏覽器中訪問帅刊,新建項(xiàng)目測試

5.3 安裝k8s集群

參考Github開源項(xiàng)目

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末纸泡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赖瞒,更是在濱河造成了極大的恐慌女揭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栏饮,死亡現(xiàn)場離奇詭異吧兔,居然都是意外死亡窗看,警方通過查閱死者的電腦和手機(jī)乙各,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門敢课,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人只锭,你說我怎么就攤上這事狂秦∪馔兀” “怎么了葵硕?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吴藻。 經(jīng)常有香客問我瞒爬,道長,這世上最難降的妖魔是什么沟堡? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任侧但,我火速辦了婚禮,結(jié)果婚禮上弦叶,老公的妹妹穿的比我還像新娘俊犯。我一直安慰自己妇多,他們只是感情好伤哺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著者祖,像睡著了一般立莉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上七问,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天蜓耻,我揣著相機(jī)與錄音,去河邊找鬼械巡。 笑死刹淌,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讥耗。 我是一名探鬼主播有勾,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼古程!你這毒婦竟也來了蔼卡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤挣磨,失蹤者是張志新(化名)和其女友劉穎雇逞,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茁裙,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡塘砸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晤锥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谣蠢。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出眉踱,到底是詐尸還是另有隱情挤忙,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布谈喳,位于F島的核電站册烈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏婿禽。R本人自食惡果不足惜赏僧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扭倾。 院中可真熱鬧淀零,春花似錦、人聲如沸膛壹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽模聋。三九已至肩民,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間链方,已是汗流浹背持痰。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祟蚀,地道東北人工窍。 一個(gè)月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像前酿,于是被迫代替她去往敵國和親患雏。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容